Android Socket接收问题

时间:2012-10-15 08:48:53

标签: java android sockets

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

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块都没有捕获错误)。但是,除此之外还有其他接收。

1 个答案:

答案 0 :(得分:1)

尝试:

if( dataLength ) ...

int readBytes = 0;

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

if( dataLength ) ...

这应该可以加快速度。

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