1

我有以下代码从套接字读取数据。

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 块中捕获)。然而,在这一点之外还有其他接收发生。

4

1 回答 1

1

尝试:

if( dataLength ) ...

int readBytes = 0;

while( readBytes < dataLength )
{
   readBytes += in.read( data, readBytes, dataLength-readBytes);
}

if( dataLength ) ...

这应该有助于加快速度。

请注意,这并不是您问题的真正解决方案。但我想效率低下的循环是其中的一部分。希望我们可以编辑此答案以为您找到解决方案。

于 2012-10-15T09:55:32.080 回答