2012-06-15 67 views
3

我正在尋找一個有效的解決方案來接收和處理從套接字連接到服務器的異步消息(不同大小)。它帶來了大量的帶寬(可能是250 kB/s的穩定狀態,並且可能有高達1 MB/s的短脈衝串)。目前我正在使用DataInputStream,但在繁忙時刻,我斷開連接(如果隊列積壓太大,服務器會斷開客戶端連接)。Java的DataInputStream與BufferedInputStream

任何人都可以確認一個BufferedInputStream是否可以更好地工作?我讀過它會一次檢索大量數據,而不是逐字節,因此OS調用更少。

謝謝!

回答

1

它一次檢索塊,它可能有更少的操作系統調用,但如果您沒有調用足夠快的速度來讀取服務積壓的文件,這將無濟於事。在完全讀取預取的塊之前,它不會讀取下一個塊。

可能最好的做法是不斷地保持在InputStream之上(只要有東西需要讀取就讀取它)並在稍後或在另一個(較低優先級)線程中執行任何其他處理。

1

我不是專家,但我確實知道BufferedInputStream實際上每次都會讀取一個塊,因爲它將使用X字節大的緩衝區。它本質上是一個通過套接字讀取數據的抽象,而不是像你說的那樣使用系統調用。它可能有助於解決問題。對不起,如果我重申一些你的觀點。基本上,我會建議使用緩衝流。它更受控制,一些谷歌搜索會給你一個更好的見解。

相關問題