我正在通过一些Sonar Qube报告并在适当的时候修复问题。一些同事在文件访问方面采用的模式是创建RandomAccessFile
实例并从中获取Channel
。该频道可以返回到主叫代码 - 然后它的责任就是关闭它。问题是,通过返回一个频道,它就不可能关闭创建它的RandomAccessFile
对象 - 所以声纳会抱怨。
关闭Channel
并忽略RandomAccessFile
是否可以。我已经查看了RandomAccessFile#close()
方法并且可以看到它会关闭频道,但反之则不然。
另一个类似的例子是从new RandomAccessFile(...)
创建频道的类,稍后在另一个方法中关闭Channel
,但没有保留对RandomAccessFile
的引用。是否应该将代码更改为具有指向文件的字段并将其关闭?或者不重要吗?
答案 0 :(得分:2)
API文档没有明确说明,这可能意味着没有保证。
但是,假设Channel
是FileChannel
,则使用implCloseChannel
方法关闭频道。查看实现,如果父项是Closeable
的实例,则父项将被关闭。