AsynchronousFileChannel

2 篇文章 0 订阅
2 篇文章 0 订阅
一个读,写操作文件的异步通道。

当通过此类定义的一个打开方法打开一个文件时将生成一个异步文件通道。
该文件包含可读取和可写入的可变长度序列,并且可以查询当前长度大小。
当写入字节的长度超过当前大小字节的长度会随之增加;当文件被截断时,文件的大小会减小。。

异步文件通道在文件中没有当前位置。 而是将文件位置指定给启动异步操作的每个读写方法。 一个CompletionHandler被指定为一个参数,并被调用以消耗I / O操作的结果。 此类还定义了启动异步操作的读取和写入方法,返回未来以表示操作的待处理结果。 未来可能用于检查操作是否已经完成,等待完成,并检索结果。

除了读写操作外,这个类还定义了如下的操作:
对文件的更新可能被强制退出到底层存贮设备,确保在系统崩溃时数据不会丢失。
文件的区域可以被锁定以防其他程序的访问。

一个异步文件通道是和一个线程池相关联的,这个线程池会处理I/O事件以及把这些事件分发给
completion handlers,这些handlers会消费这个通道上I/O的结果。在通道上启动的I / O操作的完成处理程序保证由线程池中的一个线程调用(这样可以确保完成处理程序由具有预期标识的线程运行)。当一个io操作立即完成,而且启动的线程本身是线程中的线程,则完成处理程序可以直接由启动线程调用。当创建异步文件通道没有指定线程时程序会分配默认的线程池,默认线程池有可能会被多个通道共享。默认线程池的配置由AsynchronousChannelGroup类来定义。。

此类型的通道被多个并发线程使用时是安全的。close方法可以随时被调用,由Channel接口指定。close使用不当会导致这个通道上所有未完成的异步操作会AsynchronousCloseException.来完成。多个读操作和写操作可能同时出现。当多个读写操作都未完成时,它们就会排队,但是被调用的completion handler的顺序没有被指定。他们不会被保证按照操作开始的顺序执行。ByteBuffers用于当并发io操作不安全时。此外,当一个io操作启动之后要当心确保这个操作不会再完成之前去访问buffer。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值