android - 转换从 Android 中的 BufferedReader 读取的 char[] 时出现 StringIndexOutOfBoundsException

标签 android bufferedreader indexoutofboundsexception stringindexoutofbounds

我试图通过 Android 应用程序中的套接字连接读取 JSON 字符串,但突然开始出现我无法解释的 StringIndexOutOfBoundsExceptions(屏蔽了包名称中的一些标识符):

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

SocketHandler.listenForMessages() 读取的地方(从第 45 行开始)

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

让我假设问题源于阅读一条空消息,但我不明白为什么问题没有早点出现。有帮助吗?

最佳答案

尝试替换这个:

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

有了这个:

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

关于android - 转换从 Android 中的 BufferedReader 读取的 char[] 时出现 StringIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54261249/

相关文章:

java - 使用 Buffered Reader 和 org.json、空指针从 SimpleClient http 请求获取 JSON

java - 线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : 80

java - 如何在 Java 纯代码中从 Android 复制 AsyncTask

java - Android Activity 变量类型

android - 如何知道被叫方是否接听了电话(他拿起电话时的电话状态是什么)

java - java数组索引越界

java - IndexOutOfBoundsException:我在 while 循环中看不到

android - 数据绑定(bind) - 必须首先将 Lambda 表达式解析为其 setter 以获取类型

java - Android Studio 无法运行单个类

java - BufferedReader 中跳过和重置方法的一些实际用例是什么?