我正在開發一個應用程序,通過套接字與第三方應用程序進行通信。基本上,我的應用程序需要發送一些請求到服務器,並且服務器返回一些數據。當服務器向我發回少量數據時,一切正常。但是,當我從服務器請求大量數據時,我的應用程序有時不會收到完整的數據,並且會間歇性地發生。Java Socket讀取大量數據時遇到間歇性錯誤
我在互聯網上做了一些研究,並遵循了我發現的套接字編程示例,但仍然無法解決問題。以下是我目前的實施。
BufferedInputStream is = new BufferedInputStream(socket.getInputStream());
//I know the size of data that I am expecting from the server
byte[] buffer = new byte[length];
int count = 0;
int current = 0;
while(count < length) {
current = is.read(buffer, count, length - count);
if(current == -1) {
break;
} else {
count += current;
}
}
我知道我期望從服務器獲得的數據大小。發生問題時,read()方法在從服務器完全接收數據之前返回-1。我沒有任何訪問服務器端的實現。請告訴我,如果我錯過了我的代碼中的任何內容,或者有更好的方法去做。
謝謝!我在整個套接字的生命週期中只使用一個BufferedInputStreams。所以我可能必須檢查服務器端。 – 2010-12-07 10:03:53
對於你提到最後一段關於「處理收到的每個緩衝區負載」的問題,我不是很清楚。你能解釋一下嗎?非常感謝EJP。 – 2010-12-07 10:11:41
當您讀取少量數據時,BufferedInputStream很有用,例如一次只能讀取一個字節,當一次讀取就能夠一次獲得更多數據。即它可以在操作系統的一次大型讀取中使成千上萬的小讀取成爲可能。然而,在你的情況下,最大讀取大小比緩衝區大,並且大於你要讀取的典型數據包大小。即它的正上方 – 2010-12-07 10:42:34