2017-01-24 31 views
0

我對Java I/O流有點困惑。我有一個情況,我的Inputstream速度非常快(就像從磁盤讀取文件),但是我的輸出流非常慢(如寫入http servlet響應輸出流)。Java inputstream比輸出流更快

會發生什麼,如果我的文件尺寸非常大,最終將我的OutputStream(管道輸送到文件的InputStream)拋出任何內存相關的異常,並關閉流?或者我的輸出流寫入方法會被阻塞,直到輸出流數據被清除?

它甚至有可能爲OutputStream的是滿了嗎?

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

首先,這是毫不奇怪,閱讀通常比寫更快。其次,請下定決心想要問什麼。問題標題和第一段似乎提出了與第二段和代碼不同的內容。 – Tom

回答

1

是的,OutpuStream將阻塞,直到對底層系統(文件系統,網絡插座等)的寫入已完成。如果OutpuStream實際上是一個BufferedOutputStream,那麼會有一些緩衝,但最終如果緩衝區已滿,它仍會阻塞。