gpt4 book ai didi

java - JDK7 文件.copy

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:48 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com