Si consideri il seguente codice:Le operazioni del terminale sui flussi chiudono la sorgente?
Path directory = Paths.get(/* some directory */);
Files.list(directory).forEach(System.out::println);
Fa un funzionamento del terminale (come forEach
) chiudere il file sottostante che è stato aperto?
far riferimento alle parti pertinenti del javadoc di Files.list:
Il flusso restituito incapsula un DirectoryStream. Se è richiesto lo smaltimento tempestivo delle risorse del file system, è necessario utilizzare il costrutto try-with-resources per garantire che il metodo di chiusura del flusso venga richiamato al termine delle operazioni dello stream.
Se non chiama Stream.close()
, quale sarebbe l'alternativa migliore per chiamarlo mentre produce codice gestibile?
Questa domanda è simile a http://stackoverflow.com/questions/26997240/do-terminal-operations-close-the-stream?rq=1 con l'eccezione di chiedere anche quali "contromisure" prendere. – TheConstructor
Anche simile a [questa domanda] (http://stackoverflow.com/questions/22921623/closing-streams-in-the-middle-of-pipelines), che ha una lunga risposta che descrive la motivazione di questo comportamento. – Lii