Android Http URL连接可以';我不能完全阅读
我面临与Http连接相关的问题。 我的代码:Android Http URL连接可以';我不能完全阅读,android,Android,我面临与Http连接相关的问题。 我的代码: URL url = null; try { url = new URL(_url); } catch (MalformedURLException e) { } if (url != null) { HttpURLConnection urlConn = null; InputStreamReader isr = null; try { urlConn = (HttpURLConnection)url
URL url = null;
try {
url = new URL(_url);
} catch (MalformedURLException e) {
}
if (url != null) {
HttpURLConnection urlConn = null;
InputStreamReader isr = null;
try {
urlConn = (HttpURLConnection)url.openConnection();
urlConn.setRequestMethod("GET");
urlConn.setConnectTimeout(45000);
if(response == HttpURLConnection.HTTP_OK) {
StringBuffer readData = new StringBuffer("");
int size = 1024;
char[] buffer = new char[size];
int len;
isr = new InputStreamReader(urlConn.getInputStream());
while ((len = isr.read(buffer, 0, size)) > 0) {
readData.append(buffer, 0, len);
}
}
}
catch(Exception e) {
}
finally {
if(urlConn != null) {
try {
urlConn.disconnect();
} catch(Exception e) {
}
}
if(isr != null) {
try {
isr.close();
} catch(Exception e) {
}
}
}
此代码无法完全下载数据。
例如:
要读取的总大小:13901字节
以上代码可以读取大小:12937字节
这里怎么了
请给大家提建议。我已经检查了你的代码,看起来还可以。但您必须记住,您正在读取字符(2字节类型),因此readData.length()将显示字符数,而不是字节数。我做了一个测试,将您的InputStreamReader更改为BufferedInputStream,将缓冲区类型更改为byte[]。代码读取的字节数与我预期的完全相同。
雷加斯 > P>也要补充一个公认的答案:我会考虑代码Bugy,因为它没有指定InputStreamReader使用什么字符——它是平台默认值,这可能与资源使用的情况不同。因此,请始终指定要显式使用的编码(“UTF-8”),或使用执行此操作的库。您如何知道它是13901字节?这是在HTTP内容长度头中,还是正在查看磁盘上提供服务的文件?文档说明,在到达流末尾时返回-1,而不是0。即使有了这个修正,我认为Ramp的回答可能是您遇到问题的原因。嗯,如果请求了至少1个字节,则InputStream不允许返回0,因此检查“if(count>0)”实际上是可以的。虽然有关字符转换的基本点是有效的,但您对字符获取2字节的评论通常是不正确的——只有UTF-16/UCS-2具有固定的每字符2字节编码,而且它们并不常用于web服务器。UTF-8是一种可变长度编码(每个Java字符1-3字节);拉丁语-1是固定的每个字符1字节,依此类推。