StringBuffer не читает полностью

У меня есть простая функция для подключения к серверу и возврата ответа в виде строки. Он отлично работает, когда размер возвращаемых данных невелик, но когда ответ велик. Он не сохраняет полностью возвращенную строку ответа сервером и завершает строку... Удивительно, но system.out.println возвращает правильный ответ. Пожалуйста, помогите мне. Я действительно застрял.

protected String getResponseFromServer(String URLaddress) {

    HttpURLConnection connection = null;
    URL serverAddress = null;
    BufferedReader rd = null;
    StringBuffer sb = new StringBuffer();
    try {
        serverAddress = new URL(URLaddress);
        // set up out communications stuff
        connection = null;
        connection = (HttpURLConnection) serverAddress.openConnection();
        connection.setReadTimeout(20000);
        connection.connect();
        // read the result from the server
        rd = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            System.out.print(line.trim());
            sb.append(line.trim());
        }

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // close the connection, set all objects to null
        connection.disconnect();
        connection = null;
    }
    return sb.toString();
}

2 ответа

Решение

Вы получаете эту усеченную строку (заканчивается...) во время отладки? Попробуйте System.out.println(sb.toString()); прежде чем вы вернетесь.

(редактировать: этот ответ основан на коде, который ОП опубликовал первоначально. С тех пор этот вопрос был отредактирован ОП для изменения кода, вызывающего нарушение.)

Одна ошибка здесь:

sb.append(line.trim(), 0, line.length());

Если line имеет лидирующие или конечные пробелы, line.length() будет больше чем line.trim().length(), В этом случае sb.append() бросил быIndexOutOfBoundsException:

IndexOutOfBoundsException - если start или же end отрицательны, или start больше, чем end или же endбольше, чемs.length()

Другие вопросы по тегам