java - FileChannel#force 等同于 OutputStream#flush 吗?我总是需要调用它吗?

标签 java nio filechannel

我有一个类似 FilterOutputStream 的类。

public class WritableFilterChannel implements WritableChannel {

    public WritableFilterChannel(final WritableByteChannel channel) {
        super();
        this.channel = channel;
    }

    // isOpen(), close() delegates to the channel
    // write(ByteBuffer) overridden to work differently

    protected WritableByteChannel channel;
}

当我传递 FileChannel 实例时,除了 close() 之外,没有办法 force() 它。

FileChannel#force 是否等同于 OutputStream#flush?我总是需要调用它吗?

我必须这样做吗?

@Override
public void close() {
    if (channel instanceof FileChannel) throws IOException {
        ((FileChannel) channel).force(); // general solution?
    }
    channel.close();
}

最佳答案

“同等”这个词太重了。 FileChannel.force(false)OutputStream.flush() 类似。文件 channel 的force()方法在文件返回后比OutputStream 的flush() 方法提供了更强的保证。

显然,您不必 close() 调用了force() 方法的FileChannel。您应该仅在完成后关闭 channel 。但是,不能保证关闭 channel 会导致对其执行等效的强制操作。如果您需要 force() 的行为指定为 channel 闭包的一部分,那么您必须按照在 close() 方法中执行的方式显式调用它。

关于java - FileChannel#force 等同于 OutputStream#flush 吗?我总是需要调用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34859380/

相关文章:

java - 获取文件 channel 的位置

java - 在托管服务器上运行 Java 程序 - 这可能吗?

java - 在 Netty 中绑定(bind)到同一处理程序上不同端口的最佳方法是什么?

java - Windows 上多线程 Java 应用程序 CPU 使用率过低

java - 当 OP_ACCEPT 事件发生时,解复用器是如何被通知的

java - 为什么有人会在 PRIVATE 模式下使用内存映射文件?

java - 文件 channel 位置和字符串长度

java - 使用 FileChannel 编写任何 InputStream?

java - 我可以在 AnyLogic 拆分组件中将单个代理拆分为多个代理吗?

java - 如何杀死处于 RUNNING 状态的 Java 线程?