我在使用HttpConnection
索尼爱立信 W580 时遇到问题。
对我的 http 请求的响应是application/octet-stream
,并且我正在发送一个相当大的字节数组。
然而,在这款手机中,它一直被削减到 210 字节......
我已经在大量不同的手机上测试了 MIDP 应用程序,使用不同的移动运营商和 wi-fi,并且没有其他手机表现出这种行为。
好的,我发现了问题。完全是我的错...
我是如何阅读流的:
while(true){
int bytesRead = stream.read(tmpBuffer);
// if -1, EOF
if(bytesRead < 0)
break;
(...)
// WRONG LOGIC !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// if we read the last chunk of data, and found EOF
if(bytesRead < tmpBufferArrayLength)
break;
// WRONG LOGIC !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
请参阅“错误逻辑!!!”之间的部分 评论?我假设如果 read(tmpBuffer) 无法完全填充 tmp 缓冲区,那是因为到达了 EOF。API根本不保证这一点:它只是声明 EOF 由返回 -1 的 read(tmpBuffer) 发出信号。
我以前没有看到这一点,因为我测试过的所有手机(和模拟器)都能够在每次通话时完全填满缓冲区。