6

違いは何ですか

FileInputStream fstream = new FileInputStream ("file1.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

FileInputStream fstream = new FileInputStream ("file1.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));

ここで本当に DataInputStream が必要ですか?

4

5 に答える 5

4

DataInputStream の使用はよくある間違いで、さまざまなコードからのコピー アンド ペーストが原因だと思います。BufferedReader などのテキストまたは DataInputStream などのバイナリとしてファイルを読み取る必要があります。両方を使用する可能性はほとんどなく、使用しようとすると混乱が生じる可能性があります。

バッファリングされたテキストの場合

BufferedReader br = new BufferedReader(new FileReader(file));

バッファリングされたバイナリの場合

DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
于 2012-07-17T06:47:01.753 に答える
2

FileInputStream は、画像データなどの raw バイトのストリームを読み取るためのものです。文字のストリームを読み取るには、FileReader の使用を検討してください。

データ入力ストリームを使用すると、アプリケーションは、基になる入力ストリームからプリミティブな Java データ型をマシンに依存しない方法で読み取ることができます。アプリケーションは、データ出力ストリームを使用して、後でデータ入力ストリームによって読み取ることができるデータを書き込みます。

DataInputStream は、マルチスレッド アクセスに対して必ずしも安全ではありません。

FileInputStream は非常に基本的なインターフェースのみを提供します。単なるバイトではなく、数値、文字列 (または複雑なオブジェクト) を読みたい場合、それは面倒です。したがって、最初の入力ストリームを「ラップ」する 2 番目の入力ストリームを使用すると、より便利なインターフェイスが得られます。DataInputStream はこれらの 1 つです。

于 2012-07-17T05:55:38.853 に答える
2

コンストラクターに渡されるオブジェクトの重要な点はInputStreamReader()、同期保持の重みを負担するオブジェクトになるということです。FileInputStream何度も呼び出されて処理が滞る可能性を避けたい場合は、2 番目のオプションが適しています。のソースを参照してくださいReader

于 2012-07-17T05:55:57.083 に答える
1

データ入力ストリームを使用すると、アプリケーションは、基礎となる入力ストリームからプリミティブな Java データ型をマシンに依存しない方法で読み取ることができます。アプリケーションは、データ出力ストリームを使用して、後でデータ入力ストリームによって読み取ることができるデータを書き込みます。JavaDoc を確認する

BufferedReader : 文字入力ストリームからテキストを読み取り、文字をバッファリングして、文字、配列、および行を効率的に読み取ることができるようにします。

FileInputStream : FileInputStream を使用して、ファイル データをバイト単位で読み取ります。

于 2012-07-17T05:53:13.683 に答える
1

いいえ、最終的に BufferedReader を取得してデータを読み取るため、例では DataInputStream は必要ありません。

代わりに意味があるのは次のとおりです。

FileInputStream fstream = new FileInputStream ("file1.txt");
BufferedInputStream br = new BufferedInputStream(fstream);
DataInputStream dis = new DataInputStream(br);

通常、次を使用して「file1.txt」を作成した場合、これは密接に関連しています。

DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("file1.txt")));

編集:

本当に意味がないのに、なぜJavaで許可されているのですか? これはDecorator パターンであるため、これは Decorator パターンの欠点の 1 つです。

于 2012-07-17T06:01:44.993 に答える