1

我正在尝试通过 Android 应用程序中的套接字连接读取 JSON-Strings,但突然开始收到我无法解释的 StringIndexOutOfBoundsExceptions(屏蔽了包名称中的一些标识符):

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

让我假设问题源于阅读空消息,但我无法弄清楚为什么问题没有早点出现。有什么帮助吗?

4

2 回答 2

0
regionLength=-1

我认为您遇到了文件结尾。

返回:读取的字符数,如果已到达流的末尾,则返回 -1

文档

于 2019-01-19T12:07:05.090 回答
0

尝试替换这个:

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

有了这个:

int messageLength = reader.read(buffer, 0, buffer.Length);
于 2019-01-18T21:20:38.277 回答