Http URL连接无法完全读取

时间:2009-12-21 07:46:45

标签: 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.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 个答案:

答案 0 :(得分:3)

我检查了你的代码,似乎没问题。但是你必须记住你正在读取字符(2字节类型) - 所以你的readData.length()将显示字符数,而不是字节数。我做了一个测试,并将您的InputStreamReader更改为BufferedInputStream,并将缓冲区类型更改为byte []。代码读取了我预期的字节数 Regads!

答案 1 :(得分:0)

另外要添加到接受的答案:我会考虑代码错误,因为它没有指定使用什么字符编码InputStreamReader - 它是平台默认值,可能与资源使用的不同。因此,始终要么指定显式使用的编码(“UTF-8”),要么使用执行此操作的库。