因此,我根据在网上找到的文档和示例提出了以下功能,以异步方式写入文件:
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被认为是记录最丰富的语言之一,为什么没有记录此功能?
答案 0 :(得分:1)
即使没有在docs中的 return 类型上直接说明,也是如此。如果您仔细查看此处描述的段落:
此方法的工作方式与AsynchronousByteChannel.write(ByteBuffer)方法相同,除了字节是从给定文件位置开始写入的。如果给定的位置大于文件的大小,则在尝试写入时,文件将增长以容纳新的字节;未指定前一个文件末尾与新写入的字节之间的任何字节的值。
因此它说它的行为就像AsynchronousByteChannel.write(ByteBuffer)
一样,它将您重定向到Future<Integer> write(ByteBuffer src)
。此处指定了Integer
值的含义,该值基本上是写入的字节数。
此方法启动异步写操作,以将字节序列从给定的缓冲区写入此通道。该方法的行为与write(ByteBuffer,Object,CompletionHandler)方法完全相同,除了该方法返回指定待处理结果的Future而不是指定完成处理程序。 Future的get方法返回写入的字节数。