在 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;
}
最佳答案
这是否是错误取决于函数的意图。
通常这会完全按照您的预期工作,因为对 read
的调用将阻塞,直到至少有一个字节的数据可用。但是,如果输入流是非阻塞的,read
调用将在当前 没有更多可用数据时返回 0。这种状态不同于主动关闭流。
换句话说,有人可能会争论这是否是错误,这取决于您在面对调用该方法时没有可用数据的非阻塞流时期望它做什么。
关于java - JDK7 文件.copy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579380/