read(byte [] b,int off,int len)和read(byte [] b)之间的区别

时间:2010-08-25 09:37:57

标签: java io

在我们的项目中,有时当我们使用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,那么为什么我们会收到错误?

有人知道这两种方法的区别吗? 感谢

3 个答案:

答案 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不表示限制,但似乎子类可能有这样的边界错误。