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