大多数人应该知道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()
时,锁正确释放了。但是这样做安全吗?Closeable JavaDoc中说,“关闭此流并释放与之关联的任何系统资源。” 我可以安全地假设我正在按照规定使用close()
来release()
锁吗?