2017-01-24 23 views
0

JavaのI/Oストリームについて混乱しています。私はInputstreamが非常に速い(ディスクからファイルを読み込むような)が、出力ストリームが非常に遅い(HTTPサーブレット応答outputstreamに書き込むような)場合があります。Javaの入力ストリームが出力ストリームより速い

ファイルサイズが非常に大きいと、最終的に私のoutputstream(ファイルの入力ストリームにパイプされます)がメモリ関連の例外をスローしてストリームを閉じますか?出力ストリームのデータがクリアされるまで、私のoutputstream writeメソッドはブロックされますか?

出力ストリームがいっぱいになる可能性はありますか?

public void pipe(InputStream is, OutputStream os) throws IOException { 
    int n; 
    byte[] buffer = new byte[1024]; 
    while((n = is.read(buffer)) > -1) { 
    os.write(buffer, 0, n); // would this get blocked if outputstream is full? 
    } 
os.close(); 
} 
+1

まず第一に、読書は通常書くよりも速いことは驚きではありません。そして、第二に、あなたが尋ねたいものをあなたの心に入れてください。質問のタイトルと最初の段落は、2番目の段落とコードと異なるものを尋ねているようです。 – Tom

答えて

1

はい、OutpuStreamは、基本となるシステム(ファイルシステム、ネットワークソケットなど)への書き込みが完了するまでブロックします。 OutpuStreamが実際にBufferedOutputStreamである場合、いくつかのバッファリングがありますが、バッファがいっぱいになるとブロックされます。

関連する問題