在转换Android中从BufferedReader读取的char []时的StringIndexOutOfBoundsException

时间:2019-01-18 20:48:48

标签: android bufferedreader indexoutofboundsexception stringindexoutofbounds

我正在尝试通过Android应用中的套接字连接读取JSON-String,但是突然开始获取我无法解释的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 :(得分:0)

尝试替换此:

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

与此:

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

答案 1 :(得分:0)

regionLength=-1

我认为您快要结束文件了。

  

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

The docs