Java 关闭一个频道就足够了,还是还需要关闭RandomAccessFile
我正在研究一些声纳Qube报告,并在适当的地方进行修复。一些同事在文件访问方面采用的一种模式是创建一个Java 关闭一个频道就足够了,还是还需要关闭RandomAccessFile,java,nio,Java,Nio,我正在研究一些声纳Qube报告,并在适当的地方进行修复。一些同事在文件访问方面采用的一种模式是创建一个RandomAccessFile实例,并从中获取一个通道。这个通道可以返回给调用代码——然后由调用代码负责关闭它。问题是,通过返回一个通道,就不可能关闭创建它的RandomAccessFile对象——所以sonar抱怨道 是否可以关闭频道并忽略随机访问文件。我已经研究了RandomAccessFile#close()方法,可以看到它将关闭通道,但反之则不正确 另一个类似的例子是一个类,它从一个新
RandomAccessFile
实例,并从中获取一个通道。这个通道可以返回给调用代码——然后由调用代码负责关闭它。问题是,通过返回一个通道,就不可能关闭创建它的RandomAccessFile
对象——所以sonar抱怨道
是否可以关闭频道
并忽略随机访问文件
。我已经研究了RandomAccessFile#close()
方法,可以看到它将关闭通道,但反之则不正确
另一个类似的例子是一个类,它从一个新的RandomAccessFile(…)
创建一个通道,然后在另一个方法中关闭通道,但没有保留对RandomAccessFile
的引用。是否应该将代码更改为有一个指向文件的字段,并将其关闭?还是没关系?API文档没有明确说明,这可能意味着没有保证
但是,假设频道
是文件频道
,则使用implCloseChannel
方法关闭频道。查看实现,如果父级是Closeable
的实例,则父级是关闭的,调用代码对通道做了什么?新的RandomAccessFile()方法是否可以处理通道并在POJO中返回信息?我认为传递通道是一种反模式,因为关闭文件也会关闭通道,但关闭通道可能不会清理文件。关闭其中一个通道会关闭另一个通道。