java.io
多くの異なるI/Oストリーム (FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedStreams... など) があり、それらの違いを判断するのに混乱しています。あるストリーム タイプが別のストリーム タイプよりも優先される例は何ですか? また、それらの実際の違いは何ですか?
7 に答える
ストリーム:一度に 1 バイト。バイナリデータに適しています。
リーダー/ライター:一度に 1 文字。テキストデータに適しています。
「バッファリング」されたもの:一度に多くのバイト/文字。ほぼ常に良好です。
Javaを学ぶとき、私はjava.ioについてこのメンタルスキームを作成しました。
ストリーム
- バイト指向ストリーム(8ビット)
- Java.classファイルなどのバイナリデータに適しています
- 「マシン指向」のデータに適しています
リーダー/ライター
- char(utf-16)指向のストリーム(16ビット)
- Javaソースなどのテキストに適しています
- 「人間指向」のデータに適しています
緩衝
- 他に証明されない限り、常に有用です
これは大きな話題です!I /O Streams を読むことから始めることをお勧めします。
I/O ストリームは、入力ソースまたは出力先を表します。ストリームは、ディスク ファイル、デバイス、他のプログラム、メモリ アレイなど、さまざまな種類のソースと宛先を表すことができます。
ストリームは、単純なバイト、プリミティブ データ型、ローカライズされた文字、オブジェクトなど、さまざまな種類のデータをサポートします。一部のストリームは単にデータを渡します。他の人は、有用な方法でデータを操作および変換します。
それぞれの名前を単語に分けてください。それぞれの大文字は異なる単語です。
- ファイル入力ストリームは、ストリームを使用してファイルから入力を取得することです。
- ファイル出力ストリームは、ストリームを使用してファイルに出力を書き込むことです。
などなど
mmyersが書いたように:
ストリーム:一度に1バイト。
リーダー/ライター:一度に1文字。
バッファリング*:一度に多数のバイト/文字。
あなたが言及した特殊化は、さまざまなデータ ソースへの標準インターフェイスを提供するために使用される特定のタイプです。たとえば、FileInputStream と ObjectInputStream はどちらも InputStream インターフェイスを実装しますが、それぞれファイルとオブジェクトを操作します。
バイト ストリームは、Java 1.0 で文字とバイトの両方に広く使用されているストリーム タイプです。Java 1.0 以降は廃止され、文字ストリームが重要な役割を果たしています。すなわち、例えば
BufferedReader はソースから文字を取得し、そのコンストラクターは BufferedReader(Reader inputReader) のようになります。
ここで、Reader は抽象クラスであり、その具象クラスの 1 つは InputStreamReader であり、バイトを文字に変換し、キーボード (System.in) から入力を受け取ります...
BufferedReader : ストリームから文字を読み取る内部バッファーが含まれます。内部カウンタは、read() を通じてバッファに供給される次の文字を追跡します。InputStreamReader は入力をバイトとして受け取り、内部的に文字に変換します。