파일을 열고 다른 함수로 전달하여 일부 데이터를 쓰는 한 가지 방법이 있습니다. 두 번째 방법은 PrintWriter를 사용하여 데이터를 쓰려고합니다. 그러나 모든 사람들이 PrintWriter를 사용하여 해당 스트림에 쓰도록 요구하고 싶지 않았습니다. 나는 'pr.flush을 넣어하지 않는Java의 OutputStream에서 작성기 교환
현재는,이 작동하지 않습니다
public void exportRawDataIntoStream(OutputStream os) {
PrintWriter pr = new PrintWriter(os);
printFirstData(pr);
printSecondData(pr);
}
public void exportToFile(File file) {
OutputStream os = null;
try {
os = new BufferedOutputStream(new FileOutputStream(file));
exportRawDataIntoStream(os);
doMoreWithTimeFile(os);
} finally {
if (os != null) {
try {
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
(메소드 나 변수 이름의 나의 선택을 비판 귀찮게하지 않습니다 소독 예 ...)이 같이 보입니다 '를 exportRawDataIntoStream 끝에 추가하십시오. 전체 스트림을 닫으므로 PrintWriter를 닫을 수 없습니다.
홍조가 합법적이고 안정적입니까? Writer를 같은 스트림에 믹싱하는 데 사용해야하는 다른 접근 방식이 있습니까? 아니면 절대 수행하지 않아야합니까?
다른 스트림을 랩하는 Writers 및 OutputStream의 구현은 close()가 실제로 기본 스트림을 닫을 지에 따라 달라집니다. 경우에 따라 기본 스트림이 닫히지 않는다는 것을 알고 있으면 close()를 호출 할 수 있습니다. – JimN
압축 스트림과 같은 것은 일반적으로 기본 스트림을 닫지 않고 출력을 처리하는 finish() 메서드 또는 유사한 기능을 제공합니다. –
네, 그게 항상 혼란스러운 부분이었습니다. "닫기"는 체인 전체를 닫으려는 것이지만, 일부는 그렇다고 생각합니다. 일부는 그렇지 않습니다. –