책 보고 있구요
BufferedOutputStream의 close() 함수를 호출하면
실제로 기반 스트림의(FileOutputStream)의 close()를 호출하여 버퍼에 남아있는 것들을 출력한다는데
그래서 따로 FileOutputStream의 close는 호출하지 않아도 된다네요
그림 상으로 보면 보조 스트림의 아버지는 Filter고 할아버지는 OutputStream인데
어떻게 FileOutputStream이 BufferedOutputStream의 기반 스트림이 될수가 있는거지요?
초보라서 허접한 질문 죄송해요..ㅜㅜ
버퍼아웃풋스트림의 close를 호출하면 최고 조상인 아웃풋스트림의 오버라이딩된 필터 스트림의 close를 호출하는거 아네여?
public class FilterOutputStream extends OutputStream {
protected OutputStream out;
public FilterOutputStream(OutputStream out) {
this.out = out;
}
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {}
out.close(); // 기반 스트림의 close()를 호출한다.
}
}
흉..뭔소린지 모르겠다. 걍 저거 데코레이터 패턴이고. 어차피 생성자인 BufferedOutputStream(OutputStream out)에 넘긴 out의 close를 호출하는거잖음..
근데 뭔 상위 클래스랑 뭔 상관임
형도 out.close(); 라고 해서 넘겨진 out의 close를 호출하는걸 보고 있음서..
일단 데코레이터 패턴이 뭔지 모르면 찾아보셈여..
스트림에서 데코레이터 패턴 모르면 이해 못 함.
아이고 제가 잘못 생갂했어요 제성해여..
버퍼아웃풋스트림 생성할 때 파일아웃풋스트림 인스턴스를 넘겨주는걸 생각 안했네요 전 멍청한가봐요
파일아웃풋스트림 인스턴스를 OutputStream out으로 받아서 out.close 호출하는게 기반 스트림의 함수를 호출한다는거네요? 제가 멍청했어요
ㅇㅇ 기반이라는 단어가 좀 오해할 수 있을 것 같네열.
근데 뭐 코드가 같이 제시됐으니 흉이 아직 책 읽기에 미숙한게 큰듯염.