前言
首先,问问大家下面这段流读取的代码是否存在问题呢?
inputStream = ....
try {
// 根据inputStream的长度创建字节数组
byte[] arrayOfByte = new byte[inputStream.available()];
// 调用read 读取字节数组
inputStream.read(arrayOfByte, 0, arrayOfByte.length);
return new String(arrayOfByte);
}catch (Exception e){
e.printStackTrace();
}
实际上的确是有问题的,而且在线上环境结结实实的坑了我们一把。
问题回溯
- 在xx银行项目上,报了下面的一个错误信息,数组越界,如下图所示:

- 反编译jar包的代码,在如下位置用到了数组读取,根据=号切割为组数,如下图所示:

- 而这个切割的字符串,是调用
loadResource方法加载ORG_PATH_MAP得到,如下图所示:

-
<

博客讲述了在Java中使用InputStream读取数据时遇到的不完整读取问题,原因是使用了`available()`方法来估计可读字节数,而不是确保读取到流的末尾。作者分析了`available()`在不同类加载器下的行为差异,并提出了两种解决方案:循环读取直到返回-1或使用`BufferedReader`。文章强调了在使用InputStream时要注意正确处理流的读取,以避免类似问题。
6238

被折叠的 条评论
为什么被折叠?



