java - 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 被认为是记录最完善的语言之一,为什么没有记录这个函数?
解决方案
即使文档中没有直接说明返回类型。如果您仔细查看那里描述的段落:
此方法的工作方式与AsynchronousByteChannel.write(ByteBuffer)方法相同,不同之处在于从给定文件位置开始写入字节。如果给定位置大于文件大小,则在尝试写入时,文件将增长以容纳新字节;未指定前一个文件结尾和新写入字节之间的任何字节的值。
所以它说它的行为就像AsynchronousByteChannel.write(ByteBuffer)
将你重定向到Future<Integer> write(ByteBuffer src)
. 它在那里指定Integer
值的含义,基本上是写入的字节数。
此方法启动异步写入操作,以从给定缓冲区将字节序列写入此通道。该方法的行为方式与 write(ByteBuffer,Object,CompletionHandler) 方法完全相同,只是该方法没有指定完成处理程序,而是返回一个表示挂起结果的 Future。Future 的 get 方法返回写入的字节数。
推荐阅读
- javascript - 我完全不清楚,如果我在js中使用超过3条for循环的语句,是使用分号(;)还是逗号(,)
- php - ldap 用户“部门”的下拉列表
- objective-c - 当我尝试将 NSDictionary 添加到 NSMutableArray 中时,我无法替换添加的最后一个对象
- c++ - 如何使用谷歌测试打印 std::chrono 类型?
- java - 可视化从数组中删除的内容
- python-3.x - 有没有办法以字节为单位获取直接的十六进制值而不是获取字符串值?
- java - 更改返回类型以及要打印的最后一个数字
- javascript - 将单个字符串推送到数组
- go - 为什么我不能将纪元时间转换为字符串?
- sql - 从 unicoded/non-english 字符串中查找空格