打开FileDescriptor以使用Channel进行读写

时间:2016-07-26 04:28:23

标签: java

我有一个FileDescriptor,想要使用单个频道打开它进行阅读和写作。我可以使用这样的流来获得一个读取通道,一个通道用于写入,但我更喜欢单个通道。

FileChannel in = new FileInputStream(fd).getChannel();
FileChannel out = new FileOutputStream(fd).getChannel();

1 个答案:

答案 0 :(得分:0)

最近开始使用FileChannel,是的,只要您使用不修改通道的FileChannel的方法,就可以使用1 position进行读写。实际上,这是您拥有一致的文件视图的唯一方法,因为写入可能会被操作系统分页/缓存,但至少在刷新之前尚未从其他读取器“可见”。 摘录自Javadoc

  

文件通道可安全用于多个并发线程。的   根据Channel的规定,可以随时调用close方法   接口。仅涉及通道位置的一项操作或   可以更改其文件的大小,可能在任何给定时间正在进行;   尝试在第二个此类操作开始时进行第二个此类操作   进行中的操作将阻塞,直到第一个操作完成。 其他   操作,尤其是那些采取明确立场的操作,可能会   同时进行;他们实际上是否这样做取决于   基础实施,因此未指定。

我使用单线程写入(更改position)和多线程读取(不更改position,即read(ByteBuffer dst, long position)

欢呼