Http URL-соединение не может прочитать полностью - PullRequest
2 голосов
/ 21 декабря 2009

Я сталкиваюсь с проблемой подключения 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 ]

3 голосов
/ 21 декабря 2009

Я проверил ваш код, и, кажется, все в порядке. Но вы должны иметь в виду, что вы читаете символы (тип 2 байта) - поэтому ваш readData.length () будет показывать количество символов, а не байтов. Я сделал тест и изменил ваш InputStreamReader на BufferedInputStream и тип буфера на byte []. Код считал именно то количество байтов, которое я ожидал.
Regads!

0 голосов
/ 19 октября 2010

Также, чтобы добавить к принятому ответу: я бы посчитал код ошибочным, потому что он не указывает, какую кодировку символов использовать InputStreamReader - это платформа по умолчанию, которая может отличаться от используемой ресурсом. Поэтому всегда указывайте кодировку для явного использования («UTF-8») или используйте библиотеку, которая делает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...