Quando si utilizza FileLock di Java, è consentito lasciare close () per eseguire automaticamente un lock.release ()?

StackOverflow https://stackoverflow.com/questions/421833

  •  05-07-2019
  •  | 
  •  

Domanda

Come molti dovrebbero sapere close () chiude anche qualsiasi utilizzo di stream.

Ciò consente il seguente codice:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
...
br.close();

Questo è carino, dal momento che non abbiamo bisogno di un riferimento a FileInputStream e ricordati di chiuderlo.

Ma funziona anche con 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();
}

Ho provato questo codice e il blocco viene rilasciato correttamente quando viene chiamato br.close () , ma è sicuro farlo? Il JavaDoc richiudibile dice , " Chiude questo flusso e rilascia tutte le risorse di sistema ad esso associate. " Sono sicuro di supporre che sto usando close () come specificato in release () il lucchetto?

È stato utile?

Soluzione

Secondo JavaDoc :

  

Rimane valido fino a quando il blocco non lo è   rilasciato invocando il rilascio   metodo, chiudendo il canale che   è stato utilizzato per acquisirlo, o dal   terminazione di Java virtuale   macchina, a seconda di quale evento si verifica per primo.

Ed ecco i contenuti di FileInputStream.close()

public void close() throws IOException {
    if (channel != null)
        channel.close();
    close0();
}

Sembra che close sullo stream chiuda il canale che rilascia il blocco.

Altri suggerimenti

Sì.

I blocchi dipendono da un descrittore di file. Quando non esiste un descrittore di file che rappresenti un file in un processo, non ci sarebbe un blocco associato ad esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top