我有一个FileDescriptor
,想要使用单个频道打开它进行阅读和写作。我可以使用这样的流来获得一个读取通道,一个通道用于写入,但我更喜欢单个通道。
FileChannel in = new FileInputStream(fd).getChannel();
FileChannel out = new FileOutputStream(fd).getChannel();
答案 0 :(得分:0)
最近开始使用FileChannel
,是的,只要您使用不修改通道的FileChannel
的方法,就可以使用1 position
进行读写。实际上,这是您拥有一致的文件视图的唯一方法,因为写入可能会被操作系统分页/缓存,但至少在刷新之前尚未从其他读取器“可见”。
摘录自Javadoc
文件通道可安全用于多个并发线程。的 根据Channel的规定,可以随时调用close方法 接口。仅涉及通道位置的一项操作或 可以更改其文件的大小,可能在任何给定时间正在进行; 尝试在第二个此类操作开始时进行第二个此类操作 进行中的操作将阻塞,直到第一个操作完成。 其他 操作,尤其是那些采取明确立场的操作,可能会 同时进行;他们实际上是否这样做取决于 基础实施,因此未指定。
我使用单线程写入(更改position
)和多线程读取(不更改position
,即read(ByteBuffer dst, long position)
)
欢呼