私はいくつかのSonar Qubeレポートを通して、適切な箇所を修正しています。ファイルアクセスに関して一部の同僚が採用したパターンは、RandomAccessFile
インスタンスを作成し、そのインスタンスからChannel
を取得することです。このチャネルは、呼び出し元のコードに返される可能性があります。問題は、チャンネルを返すことによって、それを作成したオブジェクトRandomAccessFile
を閉じることができないということです。ソナーはそれに不満を持ちます。チャンネルを閉じるか、RandomAccessFileを閉じる必要がありますか
Channel
を閉じ、RandomAccessFile
を無視しても問題ありません。私はRandomAccessFile#close()
メソッドを見て、それがチャンネルを閉じることがわかりますが、逆は真ではありません。
new RandomAccessFile(...)
からチャネルを作成し、別の方法で後でChannel
を閉じますが、RandomAccessFile
への参照を保持していないクラスも同様の例です。コードを変更してファイルを指すフィールドを作成し、そのフィールドを閉じる必要がありますか?それとも問題じゃない?
呼び出しコードはチャネルと何をしますか?新しいRandomAccessFile()がチャンネルで動作し、POJOの情報を返すメソッドはありますか?ファイルを閉じるとチャンネルは閉じられるが、チャンネルを閉じるとファイルがクリーンアップされない可能性があるので、チャンネルを通過するための反パターンと思う。 –
クローズすると、もう一方が閉じます。 – EJP