在OpenJDK7项目java.nio.file.Files中,有以下函数。我的问题是,while循环条件应该是>=而不是>吗?这是因为source.read javadoc说当到达EOF时,它将返回-1而不是0。
/**
* Reads all bytes from an input stream and writes them to an output stream.
*/
private static long copy(InputStream source, OutputStream sink)
throws IOException
{
long nread = 0L;
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n = source.read(buf)) > 0) {
sink.write(buf, 0, n);
nread += n;
}
return nread;
}
InputStream.read
的 javadocs 表示至少会返回一个字节,否则它将会阻塞。如果由于 EOF 以外的任何原因无法读取第一个字节,则会抛出IOException
。任何返回此函数值为 0 的流都是错误的,并且没有正确地继承InputStream
。(除了缓冲区是零长度数组的情况)。 - Brian