我正在开发一个应用程序,通过套接字与第三方应用程序进行通信。基本上,我的应用程序需要发送一些请求到服务器,并且服务器返回一些数据。当服务器向我发回少量数据时,一切正常。但是,当我从服务器请求大量数据时,我的应用程序有时不会收到完整的数据,并且会间歇性地发生。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