java - 스트림

잠자는 고양이·2025년 5월 12일
0

Java

목록 보기
52/73

입출력 스트림

  • 스트림(Stream)은 데이터를 운반하는 통로
  • 물이 흐르는 것처럼 데이터가 한쪽 방향으로만 흐른다.
  • 입력과 출력을 동시에 할 수 없다. (단방향)
  • FIFO (First In First Out) 구조로, 먼저 들어온 데이터가 먼저 나간다. (선입선출)

입출력 스트림 구분

▶ 데이터 방향에 따른 구분

  • 입력 스트림 : 데이터를 읽어올 때 사용
  • 출력 스트림 : 데이터를 내보낼 때 사용

▶ 데이터 종류에 따른 구분

  • 바이트 스트림 : 바이너리 데이터 처리 (이미지, 동영상 등)
  • 문자 스트림 : 텍스트 데이터 처리 (텍스트 파일 등)

바이트 스트림

  • 1바이트 단위로 데이터를 전송하는 스트림
  • 모든 종류의 데이터(텍스트, 이미지, 오디오 등) 처리 가능
  • 주로 바이너리 데이터를 처리할 때 사용

InputStream

  • 바이트 기반 입력 스트림의 최상위 추상 클래스
  • 주요 메서드:
    • read() : 1바이트 읽기
    • read(byte[] b) : 바이트 배열로 읽기
    • read(byte[] b, int off, int len) : 지정된 크기만큼 읽기
    • close() : 스트림 닫기

OutputStream

  • 바이트 기반 출력 스트림의 최상위 추상 클래스
  • 주요 메서드:
    • write(int b) : 1바이트 쓰기
    • write(byte[] b) : 바이트 배열 쓰기
    • write(byte[] b, int off, int len) : 지정된 크기만큼 쓰기
    • flush() : 버퍼 비우기
    • close() : 스트림 닫기

키보드 입력을 읽기

  • System.in을 사용해서 InputStream 클래스의 read()로 키보드 입력을 읽을 수 있습니다.
  • finally 구문에서 스트림에 대한 close()를 하지 않으면 누수가 발생해서 시스템 장애가 발생할 수 있습니다.
  • close를 자동화하기 위해 try-with-resource를 사용할 수 있습니다.

문자 스트림

  • 2바이트 단위로 문자 데이터를 처리하는 스트림
  • 텍스트 데이터 처리에 특화
  • 문자 인코딩을 자동으로 처리
  • 유니코드 문자를 지원하여 다국어 처리 가능

Reader

  • 문자 기반 입력 스트림의 최상위 추상 클래스
  • 주요 메서드:
    • read() : 한 문자 읽기
    • read(char[] cbuf) : 문자 배열로 읽기
    • read(char[] cbuf, int off, int len) : 지정된 크기만큼 읽기
    • close() : 스트림 닫기

Writer

  • 문자 기반 출력 스트림의 최상위 추상 클래스
  • 주요 메서드:
    • write(int c) : 한 문자 쓰기
    • write(char[] cbuf) : 문자 배열 쓰기
    • write(String str) : 문자열 쓰기
    • flush() : 버퍼 비우기
    • close() : 스트림 닫기

버퍼 스트림

데코레이터 스트림

  • 다른 스트림에 부가 기능을 제공하는 스트림
  • 실제 데이터를 주고받는 스트림이 아님
  • 데코레이터 패턴이 적용된 설계
  • 스트림을 감싸서 새로운 기능을 추가 (대표적으로 버퍼 스트림)

버퍼 스트림 (Buffer Stream)

  • 버퍼(Buffer)는 데이터를 임시로 저장하는 메모리 공간
  • 버퍼 스트림은 데이터를 버퍼에 모아두었다가 한 번에 입/출력
  • 하드디스크와 같은 입출력 장치의 접근 횟수를 줄여 성능을 향상시킴
  • 일반 스트림에 비해 더 빠른 입출력 가능
  • 마트의 장바구니와 같은 역할

문제

바이트 스트림과 문자 스트림은 무슨 차이가 있나요?

항목바이트 스트림문자 스트림
처리 단위1바이트2바이트
데이터 타입바이너리 데이터 (이미지, 동영상 등)문자 데이터 (텍스트 파일 등)
사용 클래스InputStream, OutputStreamReader, Writer
인코딩 처리직접 처리해야 함자동 처리됨
주요 특징모든 데이터 처리 가능텍스트에 특화됨
profile
개발자가 되고 싶은 잠자는고양이

0개의 댓글