代码之家  ›  专栏  ›  技术社区  ›  Malt

AsynchronousFileChannel-确保在写入完成后关闭()

  •  -1
  • Malt  · 技术社区  · 7 年前

    我有一个gzip压缩器,为了解决这个问题,可以将其视为一个简单的缓冲区。

    压缩机写入NIO2 AsynchronousFileChannel . 一旦有足够的压缩字节,就会刷新缓冲区,并执行异步 AsynchronousFileChannel.write() 呼叫已启动。

    一旦 全部的 写入完成后,压缩器可能仍包含数据。所以我需要:

    • 刷新(&P);关闭压缩机
    • 执行最后一次写入
    • 异步文件通道 它本身

    的文档 AsynchronousFileChannel.close() 声明:

    此通道上任何未完成的异步操作都将

    这可能包括同一线程在调用之前提交的最后一次写入吗 close() ?

    换句话说,以下是安全的吗?

    AsynchronousFileChannel channel = ...
    ...
    //Is there a chance that this write will throw an AsynchronousCloseException?
    channel.write(...); 
    channel.close();
    

    或者我需要阻止,直到最后一次写入返回?

    1 回复  |  直到 6 年前
        1
  •  1
  •   user207421    7 年前

    这可能包括同一线程在调用close()之前提交的最后一次写操作吗?

    是的,当然。

    或者我需要阻止,直到最后一次写入返回?

    您需要在完成处理程序中完成最后一次写入,或在您成功获得其 Future