작성
·
76
답변 2
0
안녕하세요. 곽장현님, 공식 서포터즈 y2gcoder입니다.
BufferedOutputStream의 write() 메서드 구현을 보시면 좋을 것 같습니다 🙂
캡처를 보시면 write()는 내부적으로 implWrite()를 호출하고 implWrite()는 버퍼의 길이와 count를 비교하여 버퍼를 flush 해주고 있습니다. 그러면 flushBuffer()로 가보면
설명에서도 보이듯이 내부 버퍼를 flush 해주는 기능을 하고 있습니다. 생성자를 통해 받았던 OutputStream(out)의 write()를 호출해주면서 이 때 버퍼를 비워주고 count 를 초기화하는 모습을 보실 수 있습니다.
AI 인턴의 설명과 더불어 제가 간단하게 설명 드린 내용을 바탕으로 직접 BufferedOutputStream 내부 구현을 살펴보시면 이해가 되실 거라 생각합니다 🙂
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 곽장현님!
BufferedOutputStream에 대해 궁금하신 점에 대한 설명을 드리겠습니다. BufferedOutputStream
은 내부적으로 데이터를 버퍼링하고, 버퍼가 꽉 찼거나 스트림이 닫힐 때(close()
호출 시)에 버퍼에 저장된 데이터를 하위 스트림(FileOutputStream
)으로 전송합니다.
버퍼가 가득 찼을 때: BufferedOutputStream
은 지정된 크기의 버퍼를 사용합니다. 버퍼가 가득 차면, 자동으로 buffered된 내용을 하위 스트림으로 flush합니다. 이는 성능을 향상시키기 위한 방법으로, 자주 IO 연산을 수행하기보다는 모아서 한 번에 수행함으로써 비용을 줄이는 것입니다.
스트림이 닫힐 때 (bos.close()
): close()
메서드를 호출하면 flush()
가 자동으로 호출되어 버퍼에 남아 있는 데이터가 모두 하위 스트림으로 전송된 후 스트림이 닫힙니다.
따라서, BufferedOutputStream
내부의 버퍼가 꽉 차거나, 스트림을 닫을 때(close()
) 남아 있는 데이터가 FileOutputStream
으로 보내지게 됩니다.
유사한 질문들 및 답변이 여기에서 확인할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.