Pyr*_*cal 12 java nio filelock
大多数人应该知道close()
也关闭任何流使用.
这允许以下代码:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
...
br.close();
Run Code Online (Sandbox Code Playgroud)
这很好,因为我们不需要引用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();
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这段代码并且在br.close()
调用时正确释放了锁,但这样做是否安全?该可关闭的JavaDoc说,"关闭此流并释放与之关联的所有系统资源." 我可以安全地假设我正在使用锁定close()
指定release()
的吗?
根据JavaDoc:
它通过调用release方法,关闭用于获取它的通道,或者通过Java虚拟机的终止(以先到者为准)来释放锁之前一直有效.
以下是内容 FileInputStream.close()
public void close() throws IOException {
if (channel != null)
channel.close();
close0();
}
Run Code Online (Sandbox Code Playgroud)
看起来close
在流上关闭了释放锁的通道.
归档时间: |
|
查看次数: |
3572 次 |
最近记录: |