2016-05-03 26 views
1

私はいくつかのSonar Qubeレポートを通して、適切な箇所を修正しています。ファイルアクセスに関して一部の同僚が採用したパターンは、RandomAccessFileインスタンスを作成し、そのインスタンスからChannelを取得することです。このチャネルは、呼び出し元のコードに返される可能性があります。問題は、チャンネルを返すことによって、それを作成したオブジェクトRandomAccessFileを閉じることができないということです。ソナーはそれに不満を持ちます。チャンネルを閉じるか、RandomAccessFileを閉じる必要がありますか

Channelを閉じ、RandomAccessFileを無視しても問題ありません。私はRandomAccessFile#close()メソッドを見て、それがチャンネルを閉じることがわかりますが、逆は真ではありません。

new RandomAccessFile(...)からチャネルを作成し、別の方法で後でChannelを閉じますが、RandomAccessFileへの参照を保持していないクラスも同様の例です。コードを変更してファイルを指すフィールドを作成し、そのフィールドを閉じる必要がありますか?それとも問題じゃない?

+0

呼び出しコードはチャネルと何をしますか?新しいRandomAccessFile()がチャンネルで動作し、POJOの情報を返すメソッドはありますか?ファイルを閉じるとチャンネルは閉じられるが、チャンネルを閉じるとファイルがクリーンアップされない可能性があるので、チャンネルを通過するための反パターンと思う。 –

+0

クローズすると、もう一方が閉じます。 – EJP

答えて

0

APIドキュメントに明示的に記載されていないため、保証がない場合があります。

ただし、ChannelFileChannelであると仮定すると、チャネルはimplCloseChannelメソッドで閉じられます。実装を見ると、それがCloseableのインスタンスである場合、親は閉じられます。

関連する問題