logo

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

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

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

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

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



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

主キー複合キー

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

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

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

キャラクターストリーム

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

mysql更新参加
non_unicode_bytes' title=文字ストリーム

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は文字列内の文字を置換します

バイトストリーム

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 の入出力と例