Как известно большинству, close()
также закрывает использование любых потоков.
Это позволяет использовать следующий код:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
...
br.close();
Это хорошо, поскольку нам не нужна ссылка на FileInputStream
и не забудьте закрыть его.
Но это также работает для FileLock
s?
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()
, но безопасно ли это сделать? Closeable JavaDoc говорит: "Закрывает этот поток и выпускает любые связанные с ним системные ресурсы". Можно ли предположить, что я использую close()
как указано для release()
блокировки?