Android getInputStream()不会检索所有字节,但只是偶尔检索

时间:2011-05-05 20:47:23

标签: android httpresponse

首先,我有一个扩展AsyncTask的类。然后在doInBackground()方法中,我有一些代码发布HTTP post消息,并获得响应。此响应将按如下方式读入字符串:

DataInputStream dis = new DataInputStream(conn.getInputStream());
byte[] data = new byte[32768];
len = dis.read(data, 0, 32768);

if (len > 0)
{
   response = new String(data, 0, len);
}

此时,响应应为4127字节(由服务器确认)。 1/5的时间是4127字节。 2/5的时间是1205字节,2/5的时间是3853字节。我可以关闭应用程序,重新安装,并获得相同的变化。

管理服务器的人记录所有内容,并确认一遍又一遍地发送相同的数据。但是Android并没有得到完整的整流。这是无线的,而不是3g。当我使用调试器时,我可以看到返回的字符串总是相同的,只是在一个随机位置切断。

对于这么模糊(愚蠢?)的问题感到抱歉,但我已经看了好几个小时了,我看不出它有什么问题...

1 个答案:

答案 0 :(得分:1)

read方法文档说:从包含的输入流中读取最多len个字节的数据到一个字节数组。尝试读取len个字节,,但可以读取较小的数字,可能为零。实际读取的字节数以整数形式返回。

根据不同的条件,有时您可以读取所有服务器发送的数据,有时会有短读。为了获取所有数据,您应该继续循环读取流,直到len为-1,表示EOF。

InputStream in = ...;
byte[] dst = new byte[32768]; /* Assuming total len is < 32768 */
int idx = 0;
do {
  int len = in.read(dst, idx, 32768 - idx);
  idx += len;
} while (len >= 0 || idx < 32768);