StringIndexOutOfBoundsException при преобразовании char [] для чтения из BufferedReader в Android - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь прочитать JSON-Strings через соединение с сокетом в приложении Android, но внезапно начал получать StringIndexOutOfBoundsException, которые я не могу объяснить (заблокировал некоторые идентификаторы в имени пакета):

java.lang.StringIndexOutOfBoundsException: length=10000; regionStart=0; regionLength=-1
    at java.lang.StringFactory.newStringFromChars(StringFactory.java:218)
    at **.***********.SocketHandler.listenForMessages(SocketHandler.java:48)

где (начиная со строки 45) SocketHandler.listenForMessages () читает

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
char[] buffer = new char[READ_BUFFER];
int messageLength = reader.read(buffer, 0, READ_BUFFER);
String message = new String(buffer, 0, messageLength);

Я не затрагивал ту часть кода, которая работала без проблем несколько недель назад, когда я неожиданно получил это Исключение, даже когда значение READ_BUFFER было больше, чем должно быть получено (10k здесь).

Показатели

length=10000; regionStart=0; regionLength=-1

заставляет меня предположить, что проблема связана с чтением пустого сообщения, но я не могу понять, почему проблема не возникла раньше. Любая помощь?

Ответы [ 2 ]

0 голосов
/ 19 января 2019
regionLength=-1

Я думаю, вы попали в конец файла.

Возвращает: Количество прочитанных символов или -1, если достигнут конец потока

Документы

0 голосов
/ 19 января 2019

Попробуйте заменить это:

int messageLength = reader.read(buffer, 0, READ_BUFFER);

С этим:

int messageLength = reader.read(buffer, 0, buffer.Length);
...