Wie die meisten wissen sollten close()
schließt auch alle Streams verwendet.Wenn Sie Javas FileLock verwenden, ist es ok, close() zu lassen, um automatisch eine lock.release() zu machen?
Dies ermöglicht den Folgecode:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
...
br.close();
Das ist schön, da wir es schließen nicht einen Verweis auf FileInputStream
brauchen und sie erinnern.
Aber funktioniert es auch für 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();
}
Ich habe diesen Code versucht, das Schloss wird korrekt freigegeben, wenn br.close()
genannt wird, ist aber sicher ist, dies zu tun? Die Closeable JavaDoc sagt, "Schließt diesen Stream und gibt alle damit verbundenen Systemressourcen frei." Kann ich davon ausgehen, dass ich close()
wie angegeben zu release()
das Schloss verwende?