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()