在我们的项目中,有时当我们使用InputStream.read(byte[] b)
方法时,会出现一些错误
当我们使用
byte[] b = new byte[1024];
int len = -1;
while ((len = io.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
然后进展顺利。
我找到了源代码,这太棒了
public int read(byte b[]) throws IOException {
return read(b, 0, b.length);
}
在read
方法内部,它会调用read(b, 0, b.length)
。在我们的项目中,b.length
等于1024
,那么为什么我们会收到错误?
有人知道这两种方法的区别吗? 感谢
答案 0 :(得分:1)
看到read(byte[])
来电read(byte[], int, int)
, 没有区别。第一种只是更简单的阅读方式。显然必须有其他错误的东西,例如错误的输入参数或类似的东西。
编辑: 像Zenzen说的那样,你得到什么错误?
答案 1 :(得分:1)
错误的最可能原因是没有1024个字节可用于从InputStream读取。请注意,从您的示例
read(b, 0, b.length);
安全地检查可从流中读取的字节数,其中读取的是静态1024字节读取
read(b, 0, 1024)
没有采取这种预防措施。
答案 2 :(得分:1)
如上所述,异常和堆栈跟踪非常有用。
读取可以返回零长度。您的OutputStream可能不支持长度为0的写入吗? OutputStream的JavaDocs不表示限制,但似乎子类可能有这样的边界错误。