在Java中,InputStream
类具有方法read(byte[], int, int)
和readNBytes(byte[], int, int)
。看来这两种方法具有完全相同的功能,所以我想知道它们之间有什么区别。
答案 0 :(得分:0)
您是正确的,javadocs非常相似。如有疑问,请始终关注源头。大多数IDE使得附加OpenJDK源代码变得容易,并允许您深入研究它们。
这是InputStream.java的readNBytes
:
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
,则它将尝试再次读取(),直到确认实际上没有剩余的字节数为止。阅读。
编辑:请注意
InputStream
的实现。其他可能会有所不同。 InputStream
的