首先,我有一个扩展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的。当我使用调试器时,我可以看到返回的字符串总是相同的,只是在随机的位置被截断。
很抱歉问了这么一个模糊(愚蠢?)的问题,但我已经看了几个小时了,我看不出有什么问题…
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);