Как большинство должно знать, close()
также закрывает любые потоки.
Это позволяет следующий код:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
...
br.close();
Это хорошо, поскольку нам не нужна ссылка на FileInputStream
и не забудьте закрыть ее.
Но это также работает для FileLock
с?
final FileInputStream fis = new FileInputStream(new File("buffer.txt"));
final FileChannel c = fis.getChannel();
final FileLock lock = c.lock(0L, Long.MAX_VALUE, true);
final BufferedReader br = new BufferedReader(new InputStreamReader(fis));
try {
while(br.ready()) {
System.out.println(br.readLine());
}
} finally {
br.close();
}
Я пробовал этот код, и блокировка правильно снимается при вызове br.close()
, но безопасно ли это делать? Закрываемый JavaDoc говорит: «Закрывает этот поток и освобождает все связанные с ним системные ресурсы.» Можно ли предположить, что я использую close()
, как указано для release()
блокировка