IOを学ぶには、まず4つのことを理解する必要があります。
1.同期
Javaはio自体を処理します。
2.非同期
Javaはioをオペレーティングシステムに渡して処理し、バッファ領域のサイズを通知して、処理コールバックを完了します。
3.ブロック
ブロッキングIOを使用する場合、Java呼び出しは、戻る前に読み取りと書き込みが完了するまでブロックします。
4.ノンブロッキング
非ブロッキングIOを使用しているときに、すぐに読み書きできない場合、Java呼び出しはすぐに戻ります。IOイベントディスパッチャーが読み取りと書き込みが可能であることを通知すると、読み取りと書き込みが行われ、読み取りと書き込みが完了するまでループし続けます。
1.BIO:同期とブロッキング。サーバーの実装モードは1つのスレッドを接続することです。このモードの明らかな欠点の1つは、クライアント接続の数がサーバースレッドの数に比例するため、不要なスレッドオーバーヘッドが発生し、深刻になる可能性があります。また、サーバーのメモリがオーバーフローします。もちろん、この状況はスレッドプールメカニズムによって改善できますが、本質的にこの欠点を排除するものではありません。
2.NIO:JDK1.4以前は、JavaのIOモデルはBIOでしたが、JDKから導入された新しいIOモデルNIOであるJDK1.4以降は、同期非ブロッキングです。サーバーの実装モードは、1つのスレッドに対する複数の要求です。つまり、要求はマルチプレクサーセレクターに登録され、マルチプレクサーは、IO要求をポーリングするときにスレッドを開始して処理します。
3. AIO:JDK1.7はNIO2.0をリリースしました。これは真に非同期で非ブロッキングです。サーバーの実装モードは、1つのスレッドに対する複数の有効な要求です。クライアントのIO要求は最初にOSによって完了され、次にサーバーアプリケーションに通知されます。スレッド処理を開始します(コールバック)。
アプリケーションシナリオ:BIOは、同時接続の数が多くない場合に使用されます。これは、プログラミングとデバッグが非常に簡単であるためですが、同時実行性が高い場合は、NIOまたはAIOを選択する必要があります。成熟したネットワーク通信フレームワークNettyを使用することをお勧めします