Java における文字ストリームとバイト ストリーム

Java における文字ストリームとバイト ストリーム

ストリームは、継続的なデータの流れです。 Java では、I/O ストリームは、入力ソースからの読み取り、またはファイルなどの出力先に書き込むために使用されます。これらは、データに順次アクセスする方法を提供します。 java.io パッケージには、バイト ストリームと文字ストリームの両方を処理するためのクラスと、それらの間の変換を行うためのクラスが含まれています。

  • 入力ストリーム: ソースからデータを読み取ります。 
  • 出力ストリーム: データを宛先に書き込みます。 

バイト ストリームではなく文字ストリームを使用する場合:

Java では、文字は Unicode 規則を使用して保存されます。文字ストリームはテキスト ファイルを処理する場合に便利です。これらのテキスト ファイルは 1 文字ずつ処理できます。文字サイズは通常 16 ビットです。

文字ストリームではなくバイト ストリームを使用する場合:

バイト指向はバイトごとに読み取ります。バイト ストリームは、バイナリ ファイルなどの生データの処理に適しています。

上記のストリームを使用および処理する際の重要なポイント:

  • 通常、文字ストリーム クラスは Reader/Writer で終わりますが、バイト ストリーム クラスは InputStream/OutputStream で終わります。
  • この記事のサンプル コードでは、効率が低い非バッファー ストリームを使用しています。パフォーマンスを向上させるために、通常は BufferedReader/BufferedWriter (文字ストリーム) または BufferedInputStream/BufferedOutputStream (バイト ストリーム) でラップします。
  • リソースを解放してエラーを防ぐために、使用後は必ずストリームを閉じてください。
  • ファイルが存在しない可能性があるため、上記のコードはオンライン コンパイラでは実行できない可能性があります。

キャラクターストリーム

Java では、文字は Unicode 規則を使用して保存されます。文字ストリームを使用すると、データを 1 文字ずつ自動的に読み書きできるようになります。たとえば、FileReader と FileWriter は、ソースから読み取り、宛先に書き込むために使用される文字ストリームです。

non_unicode_bytes文字ストリーム

Java
   import     java.io.*  ;   public     class   GFG     {      public     static     void     main  (  String  []     args  )      throws     IOException      {      // Initially assigning null as we have not read anything      FileReader     sourceStream     =     null  ;      try     {      // Reading from file      sourceStream     =     new     FileReader  (  '/Users/mayanksolanki/Desktop/demo.rtf'  );      // Reading sourcefile and writing content to target file character by character.      int     temp  ;      // If there is content inside file than read      while     ((  temp     =     sourceStream  .  read  ())     !=     -  1  )      System  .  out  .  println  ((  char  )  temp  );          System  .  out  .  print  (  'Program successfully executed'  );      }          finally     {      if     (  sourceStream     !=     null  )      sourceStream  .  close  ();      }      }   }   

出力:

コンテンツをターゲット ファイルに 1 文字ずつ書き込みます

プログラムは正常に実行されました

バイトストリーム

Java のバイト ストリームは、生の 8 ビット バイナリ データの入出力を処理するストリームです。主に、画像、オーディオ、ビデオ、バイナリ ファイルなどの非テキスト データの読み取りと書き込みに使用されます。例えば ファイル入力ストリーム はソースからの読み取りに使用され、FileOutputStream は宛先に書き込むために使用されます。

例:

Java
   import     java.io.*  ;   public     class   GFG     {      public     static     void     main  (  String  []     args  )      throws     IOException      {      // Initially assigning null ot objects for reading and writing to file      FileInputStream     sourceStream     =     null  ;      FileOutputStream     targetStream     =     null  ;      try     {      // Passing the files via local directory      sourceStream     =     new     FileInputStream  (  '/Users/mayanksolanki/Desktop/demo.rtf'  );      targetStream     =     new     FileOutputStream  (  '/Users/mayanksolanki/Desktop/democopy.rtf'  );      // Reading source file and writing content to file byte by byte      int     temp  ;      // If there is content inside file than read      while     ((  temp     =     sourceStream  .  read  ())     !=     -  1  )      targetStream  .  write  ((  byte  )  temp  );          System  .  out  .  print  (  'Program successfully executed'  );      }      // finally block that executes for sure where we are closing file connections to avoid memory leakage      finally     {      if     (  sourceStream     !=     null  )      sourceStream  .  close  ();      if     (  targetStream     !=     null  )      targetStream  .  close  ();      }      }   }   

出力:

プログラムは正常に実行されました

文字ストリームとバイトストリームの違い

側面 キャラクターストリーム バイトストリーム
扱うデータ型 16 ビット Unicode 文字 (テキスト) 8ビット生データ(バイナリ)
授業は次で終わります リーダー/ライター 入力ストリーム / 出力ストリーム
に適しています テキスト ファイル Unicode データ 画像、オーディオ、ビデオのバイナリ ファイル
変換 バイトを文字に自動的に変換します 生のバイトでは変換が機能しません
ファイルリーダー ファイルライター ファイル入力ストリーム ファイル出力ストリーム

関連記事

  • Java IO - Java の入出力と例