Достаточно ли закрыть канал или нужно также закрыть RandomAccessFile
Я работаю над некоторыми отчетами Sonar Qube и исправляю вещи там, где это необходимо. Шаблон, который некоторые коллеги использовали для доступа к файлам, заключается в создании RandomAccessFile
экземпляр и получить Channel
от него. Этот канал может быть возвращен к вызывающему коду - чья обязанность - закрыть его. Проблема в том, что при возврате канала невозможно закрыть RandomAccessFile
объект, который его создал - так жалуется гидролокатор.
Это нормально, чтобы закрыть Channel
и игнорировать RandomAccessFile
, Я посмотрел на RandomAccessFile#close()
метод и может видеть, что он закроет канал, но обратное неверно.
Другим похожим примером будет класс, который создает канал из new RandomAccessFile(...)
а позже в другом методе закрывает Channel
но не сохранил ссылку на RandomAccessFile
, Следует ли изменить код, чтобы в нем было поле, указывающее на файл, и закрыть его вместо этого? Или это не имеет значения?
1 ответ
В документации API это не указано явно, что может означать, что гарантии нет.
Однако при условии Channel
это FileChannel
затем канал закрывается implCloseChannel
метод. Глядя на реализацию, родитель закрывается, если это экземпляр Closeable
,