Java NIO2 AsynchronousFileChannel返回Future <integer>,并且没有实际值的文档名

时间:2018-06-26 20:10:18

标签: java nio2

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

    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()的预期的文档! 在调试模式下,成功创建/写入文件将返回Integer值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被认为是记录最丰富的语言之一,为什么没有记录此功能?

1 个答案:

答案 0 :(得分:1)

即使没有在docs中的 return 类型上直接说明,也是如此。如果您仔细查看此处描述的段落:

  

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

因此它说它的行为就像AsynchronousByteChannel.write(ByteBuffer)一样,它将您重定向到Future<Integer> write(ByteBuffer src)。此处指定了Integer值的含义,该值基本上是写入的字节数。

  

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