ほとんどの人が知っているclose()
ように、ストリームが使用するものも閉じます。
これにより、次のコードが可能になります。
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
...
br.close();
FileInputStream
への参照を必要とせず、閉じることを忘れないので、これは素晴らしいことです。
しかし、それはsでも機能し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()
が呼び出されたときにロックが正しく解放されましたが、そうしても安全ですか? Closeable JavaDocは、「このストリームを閉じて、それに関連付けられているシステム リソースをすべて解放します」と述べています。ロックclose()
に指定されたとおり に使用していると想定しても安全ですか?release()