java:InputStream实例的read vs readNBytes

时间:2018-12-13 02:52:44

标签: java io inputstream

在Java中,InputStream类具有方法read(byte[], int, int)readNBytes(byte[], int, int)。看来这两种方法具有完全相同的功能,所以我想知道它们之间有什么区别。

1 个答案:

答案 0 :(得分:0)

您是正确的,javadocs非常相似。如有疑问,请始终关注源头。大多数IDE使得附加OpenJDK源代码变得容易,并允许您深入研究它们。

这是InputStream.javareadNBytes

public int readNBytes(byte[] b, int off, int len) throws IOException {
    Objects.requireNonNull(b);
    if (off < 0 || len < 0 || len > b.length - off)
        throw new IndexOutOfBoundsException();
    int n = 0;
    while (n < len) {
        int count = read(b, off + n, len - n);
        if (count < 0)
            break;
        n += count;
    }
    return n;
}

如您所见,它实际上执行了对read(byte[],int,int)的调用。在这种情况下的区别在于,如果实际读取的字节数小于您指定的len,则它将尝试再次读取(),直到确认实际上没有剩余的字节数为止。阅读。

编辑:请注意

  1. 这是 OpenJDK 对基础InputStream的实现。其他可能会有所不同。
  2. InputStream
  3. 子类也可以具有自己的重写实现。请查阅相关课程的文档/资源。