Не удается получить все данные с сервера с помощью BufferedReader - PullRequest
0 голосов
/ 02 июля 2018

Я использую приведенный ниже код для чтения данных JSON с сервера:

URL url = new URL("www.example.com/serverData.php");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()), 8*1024);
String next;
StringBuilder total = new StringBuilder();
while ((next = bufferedReader.readLine()) != null){
    total.append(next).append('\n');
}

Этот код не получает все данные с сервера. Когда я пытаюсь получить строку данных ниже, она показывает около 6000, а сервер возвращает более 10000 символов.

Log.d("Stream", String.valueOf(total.length()));

Что я делаю не так? Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 03 июля 2018

Я думаю, что проблема в том, что вы указали размер блока 8 Кбайт для чтения, не регулируя цикл чтения соответствующим образом с кусками того же размера. Вы можете настроить цикл для чтения и записи с учетом ожидаемого размера:

int BUFFER_SIZE = 8 * 1024;
BufferedInputStream origin = new BufferedInputStream(httpConn.getInputStream(), BUFFER_SIZE);
ByteArrayOutputStream bas = new ByteArrayOutputStream();
byte data[] = new byte[BUFFER_SIZE];
int count;
while ((count = origin.read(data, 0, BUFFER_SIZE)) != -1) {
    bas.write(data, 0, count);
}
origin.close();
bas.close();
Log.d("Stream", bas.toString("UTF-8"));

Если вас не интересует чтение размера чанка (т. Е. Вы согласны со значениями по умолчанию для платформы), тогда вы можете попробовать изменить код следующим образом:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...