2012-10-24 46 views
0

我在solaris OS上創建一個使用java運行時的進程。然後我從流程中獲得輸入流並對輸入流進行讀取。我期望(我不太清楚這個過程是什麼,它是第三方的事情),這個過程非常龐大,但似乎被削減了。難道在Java方面有一個門檻,它的輸出流中有多少進程?使用java時是否對流程輸入流有限制?

感謝, 阿卜杜勒

+1

試試先:) –

+0

是的,應該沒有問題試圖啓動命令行的過程,比較輸出到您在Java收到一個。 – rolve

回答

1

沒有限制的數據可以閱讀量,如果你反覆讀。您無法一次讀取超過2 GB的數據,而某些數據流類型一次只能提供幾個KB。例如一個緩慢的Socket會經常給你1.5 KB或更少(根據連接的MTU)

如果你打電話int read(byte[])它只能保證讀取1個字節。假設您每次都會讀取完整的緩衝區是一個常見的錯誤。如果您需要此功能,您可以使用DataInputStream.readFully(byte[])

+0

DataInputStream.readFully函數的文件大小是否有任何限制? – Aavik

+0

@Aavik該文件需要至少具有字節[]的長度,但尚未讀取,否則會拋出IOException。否則它可以是任何大小。 –

0

如果執行得當,您不應該受到InputStreamOutputStream的限制。當從輸入或輸出中分配對象時,最有可能遇到限制的資源是內存 - 例如嘗試將100GB文件讀入內存然後寫入輸出。如果你需要非常大的對象加載到內存中或從流,確保使用64位JVM和你可以分配儘可能多的內存吧,但是測試是確定理想值的唯一途徑。

+0

你是對的,我試着更新我的答案,使其更清楚。我打算說,如果您正在分配非常大的對象來寫入'OutputStream',則可能會遇到內存問題,而不是流的實際限制。 – doublesharp

0

通過「工藝輸出流」你的意思是標準輸出? STDERR?或者你有一個你指向某處的OutputStream對象? (文件?)

如果你寫一個文件 - 你可能會看到截取的數據,如果你不關閉輸出流。只要你完成書(outputstream.close()),你就可以完成了。請注意,存在一些潛在的限制,如存儲空間(明顯)或文件系統限制(一些限制文件大小)。

如果您寫信給STDOUT/STDERR - 據我所知,你的罰款。再請注意,如果你寫你的輸出到終端,或者通過Eclipse的(例如),那麼他們可能有一個緩衝,因此限制了你的輸出(但後來,它最有可能,你會得到的數據丟失的第一部分和而不是最後一部分)。