我有以下代码从套接字读取数据。
byte[] data = new byte[dataLength];
if(dataLength > 2000000)FileManager.writeToLogFile(this.getClass(), "GetIncomingMessages", LogMessageType.DEBUG, "XXXXYYYY => 2 length: " + dataLength);
for(int i = 0 ; i < dataLength ; i++){
byte[] temp = new byte[1];
in.read(temp);
data[i] = temp[0];
}
if(dataLength > 2000000)FileManager.writeToLogFile(this.getClass(), "GetIncomingMessages", LogMessageType.DEBUG, "XXXXYYYY => 3 length: " + dataLength);
此代码正常工作,直到我得到一个大小约为3MB的包(确切地说是3227056字节)。收到此数据包时,不会发生异常,我的程序也不会崩溃,但代码永远不会超过该点。基本上,您没有看到上面显示的最后一个日志条目。
这可能是什么原因?我怎么能至少弄清楚错误是什么? (任何try-catch块都没有捕获错误)。但是,除此之外还有其他接收。
答案 0 :(得分:1)
尝试:
if( dataLength ) ...
int readBytes = 0;
while( readBytes < dataLength )
{
readBytes += in.read( data, readBytes, dataLength-readBytes);
}
if( dataLength ) ...
这应该可以加快速度。
注意,这不是您问题的真正解决方案。但我想低效循环是其中的一部分。希望我们可以编辑这个答案,为您找到解决方案。