我正面临与问题相关的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.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字节
这里有什么问题?
请指教。
答案 0 :(得分:3)
我检查了你的代码,似乎没问题。但是你必须记住你正在读取字符(2字节类型) - 所以你的readData.length()将显示字符数,而不是字节数。我做了一个测试,并将您的InputStreamReader更改为BufferedInputStream,并将缓冲区类型更改为byte []。代码读取了我预期的字节数 Regads!
答案 1 :(得分:0)
另外要添加到接受的答案:我会考虑代码错误,因为它没有指定使用什么字符编码InputStreamReader - 它是平台默认值,可能与资源使用的不同。因此,始终要么指定显式使用的编码(“UTF-8”),要么使用执行此操作的库。