java - JDK7 文件.copy

标签 java file stream inputstream java-7

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

相关文章:

java - 查找两个日期之间的月数,包括额外的天数?

java - 经理/交易的目的是什么?

c++ - 使用 C 或 C++ 在大型二进制文件中查找模式?

linux - 在 Linux 上修复几千个文件名

c - 为什么 zlib deflate() 挂起?

java - 以编程方式确定 AppEngine for Java 环境

java - 从jar中读取资源文件

C 从/proc 中的文件中提取信息

java - 如何停止在 Java 中的阻塞读取操作中等待的线程?

Java 套接字 - 丢失字节和 100% 处理器功耗