是否足以关闭频道或需要关闭RandomAccessFile

时间:2016-05-03 09:51:16

标签: java nio

我正在通过一些Sonar Qube报告并在适当的时候修复问题。一些同事在文件访问方面采用的模式是创建RandomAccessFile实例并从中获取Channel。该频道可以返回到主叫代码 - 然后它的责任就是关闭它。问题是,通过返回一个频道,它就不可能关闭创建它的RandomAccessFile对象 - 所以声纳会抱怨。

关闭Channel并忽略RandomAccessFile是否可以。我已经查看了RandomAccessFile#close()方法并且可以看到它会关闭频道,但反之则不然。

另一个类似的例子是从new RandomAccessFile(...)创建频道的类,稍后在另一个方法中关闭Channel,但没有保留对RandomAccessFile的引用。是否应该将代码更改为具有指向文件的字段并将其关闭?或者不重要吗?

1 个答案:

答案 0 :(得分:2)

API文档没有明确说明,这可能意味着没有保证。

但是,假设ChannelFileChannel,则使用implCloseChannel方法关闭频道。查看实现,如果父项是Closeable的实例,则父项将被关闭。