바이트 기반의 보조 스트림의 자손: Buffered 입출력 스트림

2022. 4. 24. 20:07·자바/입출력 IO

1. BufferedInputStream과 BufferedOutputStream

- 앞서 봤을 수도 있겠지만, 이 보조 스트림은 입출력 효율을 높이기 위해 버퍼를 사용한다.

 

- 즉, 한 바이트씩 입출력하는 것 보다는 버퍼를 이용해서 한 번에 여러 바이트를 입출력하는 것이

빠르다.

 

- 아래는 Buffered 입력 스트림의 생성자이다.

 

(1) BufferedInputStream(InputStream in)

:  InputStream의 인스턴스 in을 입력소스로 하며, 크기를 지정하지 않았으므로, 8192byte 크기의 버퍼를

갖게 된다.

 

(2) BufferedInputStream(InputStream in, int size)

: InputStream의 인스턴스 in을 입력소스로 하며, 지정된 size의 값 크기(byte 단위)의 버퍼를 갖는

인스턴스를 생성한다.

 

 

 

- 아래는 Buffered 출력 스트림의 생성자이다.

 

(1) BufferedOutputStream(OutputStream out)

: OutputStream의 인스턴스를 출력소스로 하며, 크기를 지정하지 않았으므로, 8192byte 크기의 버퍼를

갖게 된다.

 

(2) BufferedOutputStream(OutputStream out, int size)

: OutputStream의 인스턴스를 출력소스로 하며 지정된 크기(byte 단위)의 버퍼를 갖는 인스턴스를

생성한다.

 

(3) flush()

: 버퍼의 모든 내용을 출력소스에 출력한 다음, 버퍼를 비운다.

 

(4) close()

: flush() 수행 후, BufferedOutputStream의 인스턴스가 사용하던 모든 자원을 반환한다.

 

 

( 주의할 점은 버퍼가 가득 찼을 때만 출력소스에 출력하기 때문에, 마지막 출력부분이 출력소스에 쓰이지 못하고

남아있는 채로 종료될 수 있다. )

( 그러므로, BufferedOutputStream에 flush()나 close()를 호출해서 남아있는 부분이 있는지 확인해야 한다. )

 

 

 

 

1-1. Buffered 입출력 스트림을 이해하기 위한 예제(1)

 

( 예상했던 결과와 달리 6,7,8,9가 출력되지 않았다. )

( 그 이유는 위에서 말했듯이 flush()와 close()를 사용하지 않았기 때문이다. )

 

( 그러므로, fos.close() 위에 bos.flush()나 bos.close()를 사용해야 한다. )

( 또한 bos.close()를 사용하게 되면 기반(주) 스트림인 FileOutputStream의 close()를 호출하기 때문에,

따로 fos.close()를 해줄 필요 없다. )

 

( 추가적으로 보조 스트림의 조상인 FilterOutputStream의 close() 안에는 flush()가 선언되어 있으므로, 

close()만 호출하면 된다. )

'자바 > 입출력 IO' 카테고리의 다른 글

InputStream의 자손: Sequence 입력 스트림(보조 스트림)  (0) 2022.04.25
바이트 기반의 보조 스트림의 자손: Data 입출력 스트림  (0) 2022.04.24
바이트 기반의 보조 스트림의 조상: Filter 입출력 스트림  (0) 2022.04.24
바이트 기반 스트림: File 입출력 스트림  (0) 2022.04.24
바이트 기반 스트림: Byte 입출력 스트림  (0) 2022.04.24
'자바/입출력 IO' 카테고리의 다른 글
  • InputStream의 자손: Sequence 입력 스트림(보조 스트림)
  • 바이트 기반의 보조 스트림의 자손: Data 입출력 스트림
  • 바이트 기반의 보조 스트림의 조상: Filter 입출력 스트림
  • 바이트 기반 스트림: File 입출력 스트림
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      코드트리
      안드로이드 스튜디오
      Arrays
      InputStream
      ServerSocket
      outputstream
      TCP 소켓 프로그래밍
      snail
      역직렬화
      문자 기반 스트림
      map()
      자바 개념
      serializable
      중간연산
      안정 정렬
      java.lang패키지
      file
      코딩테스트
      제자리 정렬
      스트림
      Collections Framework
      선택 정렬
      java.time 패키지
      유용한 클래스
      다형성
      소켓 프로그래밍
      코딩트리조별과제
      알고스팟
      람다식
      불안정 정렬
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    바이트 기반의 보조 스트림의 자손: Buffered 입출력 스트림
    상단으로

    티스토리툴바