0

そこで最近、Java の標準的な基本的なネットワークは次のようになっていることを知りました。

out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));

明確にしたいので、出力には a を使用しません。これBufferedWriterはサーバー側の仕事だからですか? 次のようなことをするのは間違っているでしょうか。

out =  new BufferedWriter(PrintWriter(echoSocket.getOutputStream(), true));
4

2 に答える 2

3

Javaドキュメントから:

http://docs.oracle.com/javase/tutorial/essential/io/buffers.html

これまで見てきた例のほとんどは、バッファなしのI/Oを使用しています。これは、各読み取りまたは書き込み要求が基盤となるOSによって直接処理されることを意味します。これにより、プログラムの効率が大幅に低下する可能性があります。これは、このような各要求が、ディスクアクセス、ネットワークアクティビティ、または比較的コストのかかるその他の操作をトリガーすることが多いためです。

この種のオーバーヘッドを減らすために、JavaプラットフォームはバッファリングされたI/Oストリームを実装します。バッファリングされた入力ストリームは、バッファと呼ばれるメモリ領域からデータを読み取ります。ネイティブ入力APIは、バッファが空の場合にのみ呼び出されます。同様に、バッファリングされた出力ストリームはデータをバッファに書き込み、ネイティブ出力APIはバッファがいっぱいになったときにのみ呼び出されます。

はい、「バッファリングされた」入力出力は通常良い考えです。

私見では...

PS:

PrintWriterに問題はありません。特に、ソケットに対して直接「printf()」スタイルのテキストI/Oを実行したい場合。

于 2013-03-16T00:39:39.780 に答える