首页 > 解决方案 > Java NIO2 AsynchronousFileChannel 返回 Future没有关于实际值的文档

问题描述

所以我根据我在网上找到的文档和示例提出了以下功能,以异步方式编写文件:

    public static Future<Integer> createAndWriteToFile(String fullFileName, String content) throws IOException {
        Path file = Utils.createFile(fullFileName);
        AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(file, StandardOpenOption.WRITE, StandardOpenOption.CREATE);

        ByteBuffer buffer = ByteBuffer.wrap(content.getBytes());
        Future<Integer> operation = fileChannel.write(buffer, 0);
        buffer.clear();

        return operation;
}

但是,绝对没有关于调用的期望的文档operation.get().intValue()!在调试模式下,成功的文件创建/写入返回整数值 23。还有哪些其他可能的值?文档: https ://docs.oracle.com/javase/8/docs/api/java/nio/channels/AsynchronousFileChannel.html#write-java.nio.ByteBuffer-long-

在这里: https ://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html#get--

返回:计算结果

有帮助,不是。

作为一个问题 - 让我感到惊讶的是,Java 被认为是记录最完善的语言之一,为什么没有记录这个函数?

标签: javanio2

解决方案


即使文档中没有直接说明返回类型。如果您仔细查看那里描述的段落:

此方法的工作方式与AsynchronousByteChannel.write(ByteBuffer)方法相同,不同之处在于从给定文件位置开始写入字节。如果给定位置大于文件大小,则在尝试写入时,文件将增长以容纳新字节;未指定前一个文件结尾和新写入字节之间的任何字节的值。

所以它说它的行为就像AsynchronousByteChannel.write(ByteBuffer)将你重定向到Future<Integer> write(ByteBuffer src). 它在那里指定Integer值的含义,基本上是写入的字节数。

此方法启动异步写入操作,以从给定缓冲区将字节序列写入此通道。该方法的行为方式与 write(ByteBuffer,Object,CompletionHandler) 方法完全相同,只是该方法没有指定完成处理程序,而是返回一个表示挂起结果的 Future。Future 的 get 方法返回写入的字节数。


推荐阅读