Java IO (BIO) の概要

        IO ストリームは通常、入力 (Input) と出力 (Output) のペアで存在します。これは、ある場所から別の場所にデータを転送するプロセスであり、コンピューターの場合は、ファイルのコピー プロセス、ファイルの書き込みと保存、および表示です。関数はすべて IO を使用し、データ送信プロセスを入出力とみなします。

        Java IO は BIO (Blocking IO) とも呼ばれ、初期に Java によって提供された IO モデルです。これはブロッキング IO です。つまり、IO 操作を実行すると、その IO 操作が完了するまでスレッドがブロックされます。ここでの主な紹介はBIOモデルです。

IO 分類:

        流れの方向に従って:

  •         入力ストリーム (入力)
  •         出力ストリーム (出力)

        フローの処理タイプに応じて、次のようになります。 

  •         バイトストリーム(バイト)
  •         文字ストリーム (char)

        フローの機能によると、次のようになります。  

  •         ノード ストリーム (入力ソースおよび出力ソースと直接対話します)
  •         処理ストリーム (他のストリームをラップするストリーム: ラッピング ストリーム)

 

バイトストリーム: 

        InputStream はすべてのバイト入力ストリームのスーパークラスであり、バイト データを読み取るための基本的なメソッドを提供します。OutputStream はすべてのバイト出力ストリームのスーパークラスであり、バイト データを書き込むための基本メソッドを提供します。

  • FileInputStream/FileOutputStream :ファイルの読み取りと書き込みのためのバイト ストリーム。ファイルへのバイトデータの読み取りまたは書き込みが可能になります。
  • ByteArrayInputStream/ByteArrayOutputStream :メモリ内のバイト配列を読み書きするためのストリーム。
  • BufferedInputStream/BufferedOutputStream :バッファ機能を備えた入出力を提供し、IO動作の効率を向上させることができます。
  • ObjectInputStream/ObjectOutputStream : Java オブジェクトの読み取りと書き込みのためのストリーム。Java オブジェクトをバイト ストリームにシリアル化したり、バイト ストリームを Java オブジェクトに逆シリアル化したりできます。
  • PipedInputStream/PipedOutputStream: スレッド間通信用のパイプライン ストリーム。複数のスレッド間のデータ転送のメカニズムを提供します。PipedInputStream は PipedOutputStream からデータを受け取ります。
    PipedOutputStream output = new PipedOutputStream();
    // 订阅output
    PipedInputStream input = new PipedInputStream(output); 
    
  • PrintStream: バイトプリントストリーム

文字ストリーム: 

        リーダー/ライター: リーダーはすべての文字入力ストリームのスーパークラスであり、文字データを読み取るための基本的なメソッドを提供します。Writer はすべての文字出力ストリームのスーパークラスであり、文字データを書き込むための基本的なメソッドを提供します。

  • InputStreamReader/OutputStreamWriter :バイトストリームを文字ストリームに変換するブリッジストリーム。文字エンコーディングを指定して、バイト データを文字データに変換します。
  • FileReader/FileWriter :ファイルの読み取りと書き込みのための文字ストリーム。これらを使用すると、文字データをファイルから読み取ったり、ファイルに書き込んだりすることができます。これらは、FileInputStream と FileOutputStream に基づく文字ストリームの実装です。
  • BufferedReader/BufferedWriter:バッファー機能を提供する文字ストリーム。これらにより、文字ストリームの読み取りおよび書き込みの効率が向上し、基盤となるシステムでの実際の IO 操作の数が削減されます。
  • CharArrayReader/CharArrayWriter:文字配列データの読み取りおよび書き込みに使用されます。
  • PipedReader/PipedWriter:パイプされたストリームに対する文字ストリーム操作。
  • PrintWriter:文字印刷ストリーム

バッファリングされたストリーム

        Linux カーネルでは、バッファリングされたストリームによってバッファに書き込まれた情報が特定のしきい値に達した場合、またはバッファリングされたストリームがリフレッシュされた場合にのみ、バッファリングされたストリームの効率が通常の文字ストリームやバイト ストリームの効率よりも高くなります。実際には情報がディスクに書き込まれますが、通常のストリームは書き込まれるたびにデータをディスクに書き込みます。バッファ付きストリームとは独自のバッファを持つストリームで、主に以下の 4 種類で構成されます。

  • BufferedInputStream/BufferedOutputStream: バイトバッファリングされた入力ストリーム/バイトバッファリングされた出力ストリーム
  • BufferedReader/BufferedWriter: 文字バッファ入力ストリーム/文字バッファ出力ストリーム

変換ストリーム:

要件によっては、バイト ストリームのデータを文字ストリームに変換したり、文字ストリームをバイト ストリームに変換したりする必要があることがよくあります。この場合、変換ストリームを使用して、変換ストリームは一般に次のファイルで使用されます: ファイル トランスコーディングの場合、ネットワークから読み取られたデータがバイト ストリームであるが、ストリームに文字が含まれている場合、変換ストリームを使用して変換を実現できます (java.io の変換ストリーム)。主に次の 2 つのクラスで構成されます。

  • InputStreamReader: バイト入力ストリームを文字入力ストリームに変換するために使用されます (バイト -> 文字)
  • OutputStreamWriter: 文字出力ストリームをバイト出力ストリームに変換するために使用されます (文字 -> バイト)

Java BIO、NIO、AIO:

        Java 1.4 では、より効率的な IO 操作を実現するために、Channel、ByteBuffer、Selector などの NIO (New IO、ノンブロッキング IO) 関連のクラスとインターフェイスが提供され始めました。1.7 では、アプリケーションが IO の完了を待つことなく、IO 操作をシステムに完全に委ねる AIO (Asynchronous IO) 非同期 IO モデルの導入が始まりました。

  1. Java IO (BIO):
    Java IO は、BIO (Blocking IO) とも呼ばれ、初期の Java によって提供された IO モデルです。これはブロッキング IO です。つまり、IO 操作を実行すると、その IO 操作が完了するまでスレッドがブロックされます。Java IO は、ストリームを介して IO 操作を実行します。対応するメイン クラスには、InputStream、OutputStream、Reader、および Writer が含まれます。これらは同期であり、一度に 1 つのリクエストのみを処理できます。大量の同時実行の場合、BIO モデルのパフォーマンスは低くなります。

  2. Java NIO:
    Java NIO (新しい IO) は、Java バージョン 1.4 で導入された新しい IO モデルで、ノンブロッキング IO を提供します。NIO はチャネル (Channel) とバッファー (Buffer) の概念を使用し、データはチャネルを通じて送信され、バッファーは読み取りおよび書き込み操作に使用されます。BIO と比較して、NIO はより高いパフォーマンスと同時処理能力を備えています。コア クラスには、Selector、Channel、Buffer などが含まれます。

  3. Java AIO:
    Java AIO (非同期 IO) は、Java バージョン 1.7 で導入された非同期 IO モデルです。AIO は、アプリケーションが IO の完了を待つことなく、IO 操作をシステムに完全に委ねます。これはイベントとコールバックのメカニズムに基づいており、CompletionHandler を通じて IO 完了イベントを処理し、複数の IO リクエストを同時に処理できます。主なクラスには、AsynchronousSocketChannel、AsynchronousServerSocketChannel、AsynchronousFileChannel などが含まれます。 

おすすめ

転載: blog.csdn.net/zhoushimiao1990/article/details/131920351