File file = new File("result.csv");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
쓰기 완료 후 버퍼링 된 기록기 객체를 닫지 않으면 어떻게됩니까? 우리가 bw.close()를 놓치면 어떻게 될까?Java 버퍼 드 Writer
File file = new File("result.csv");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
쓰기 완료 후 버퍼링 된 기록기 객체를 닫지 않으면 어떻게됩니까? 우리가 bw.close()를 놓치면 어떻게 될까?Java 버퍼 드 Writer
많은 파일을 열어 닫지 않으면 운영 체제에서 잠시 후 더 이상 파일을 열 수 없습니다.
또한 귀하의 BufferedWriter
은 가비지 수집되지 않았지만 쓰고 있던 파일은 운영 체제와 관련하여 열린 상태로 유지됩니다. Windows의 경우 파일 핸들이 닫히기 전까지는 BufferedWriter
가비지 수집 중이거나 JVM 종료 중일 때 파일을 삭제할 수 없습니다. 당신이 flush()
잊지 닫고, 파일이 당신이 쓴 모든 텍스트가 없을 수없는, 그래서 만약
BufferedWriter.close()
는, 기본이되는 스트림에 버퍼를 플러시합니다.
BufferedWriter.close()
또한 랩핑 된 작성기를 닫습니다. 이것이 FileWriter 일 때 궁극적으로 FileOutputStream
을 닫고 OS에 파일 작성이 완료되었음을 알립니다.
가비지 컬렉터가 자동으로되지 BufferedWriter
또는 포장 FileWriter에 close()
를 호출하지만, FileOuputStream
에 대한 것입니다. 따라서 OS는 행복 할 것이지만 GC를 기다려야합니다.
그러나 OS 리소스를 더 이상 필요하지 않으면 언제든지 해제하려고합니다. 이것은 열린 파일, 데이터베이스 연결, 인쇄 대기열 ...에 해당됩니다. 이걸 믿어.
BufferedWriter.close()
은 내부 문자 버퍼를 지우므로 BufferedWriter
이 범위 내에있는 동안에도 가비지 수집을 위해 메모리를 사용할 수 있습니다. 자세한 내용
확인 here