입출력 (바이너리/문자 기반 스트림, 보조 스트림)

2025. 2. 10. 16:19·Language/Java
목차
  1. 입출력의 스트림은 무엇인가?
  2. 스트림 (Stream)
  3. 바이트기반 스트림  (InputStream, OutStream)
  4. 문자기반 스트림  (Reader, Writer)
  5. 보조 스트림

 

 

 


 

입출력의 스트림은 무엇인가?

 

 


 

 

 

 

스트림 (Stream)

 

--

다양한 데이터를 표준화된 방법으로 다루기 위해 사용하는 "스트림"과는 다른 개념으로

입출력에서 사용하는 "스트림"은

데이터를 운반하는 데 사용되는 연결 통로를 의미한다.

 

스트림은 단방향 통신만 가능하므로
"입력 스트림", "출력 스트림" 총 2개의 스트림이 존재한다.

 

 

  • 입력 스트림  :  프로그램을 기준으로 데이터를 받는 것
  • 출력 스트림  :  프로그램을 기준으로 데이터를 내보내는 것
스트림은 먼저 보낸 데이터를 먼저 받으며, 연속적으로 데이터를 주고받기 때문에 FIFO 구조라고 생각하면 된다.
그래서 위 그림에서 "world"를 출력할 때 d, l, r, o, w로 전달된다.

--

 

 

 

 

바이트기반 스트림  (InputStream, OutStream)

 

--

바이트기반의 스트림은 "byte"단위로 데이터를 전송한다.

 

 

위 표에 작성된 스트림은 모두 "InputStream" 또는 "OutputStream"의 자식들이며,

각각 읽고 쓰는데 필요한 추상메서드를 자신에 맞게 구현된 것이다.

 

자바에서는 java.io 패키지를 통해 많은 종류의 입출력 관련 클래스들을 제공한다.

입출력을 처리할 수 있는 표준화된 방법을 제공하기 때문에
입출력의 대상이 달라져도 동일한 방법으로 입출력이 가능하다.


read(), write(int b)는
입출력의 대상에 따라 알맞게 구현하라는 의미로 "추상 메서드"로 정의되어 있으며,
나머지 메서드들은
추상 메서드인 read(), write(int b)를 이용해서 구현된 것으로
결과적으로는 read()와 write(int b)가 구현되어 있어야 한다.
 

[입출력] 바이트기반 스트림, 보조 스트림

바이트 기반의 스트림은 어떤 것들이 있을까?      바이트기반 스트림 종류 --InputStream & OutputStream모든 바이트기반 스트림의 부모이며 아래와 같은 메서드들을 제공한다.  markSupported()를 통

nijy.tistory.com

--

 

 

 

 

문자기반 스트림  (Reader, Writer)

 

--

char 타입은 2byte로 기존의 바이트기반 스트림으로는 2byte인 문자를 처리하는 것은 어려움이 존재한다.

그래서 문자 데이터를 입출력할 때는 따로 "문자기반 스트림"을 사용한다.

 

 

문자기반 스트림은 바이트기반 스트림에서 이름만 변경하면 된다.

--  InputStream  =>  Reader
--  OutputStream  =>  Writer

(단, ByteArray는 CharArray를 사용한다.)
 

[입출력] 문자기반 스트림, 보조 스트림

문자 기반의 스트림은 무엇이 있을까?      문자기반 스트림 종류 --Reader & writer문자기반의 스트림들의 부모다.  문자기반 스트림은단순히 2byte로 스트림을 처리하지 않고자바에서 사용하

nijy.tistory.com

 

 

바이트기반 스트림 VS 문자기반 스트림 비교

  • byte배열 사용 / char배열 사용
  • 추상메서드

 

문자기반 역시 추상메서드가 아닌 메서드들은 추상메서드를 이용하여 작성되어 있으며

프로그래밍적인 관점에서 보면 read()를 추상메서드로 하는 것보다

int read(char[] cbuf, int off, int len)를 추상메서드로 하는 것이 더 바람직하다.

--

 

 

 

 

보조 스트림

 

--

보조 스트림은

스트림의 기능을 보완하기 위한 것으로

기존 스트림이 아니기 때문에 입출력 기능은 없지만

기존 스트림의 기능을 향상하거나 새로운 기능을 추가할 수 있다.

 

스트림을 먼저 생성한 다음에 생성한 스트림을 이용하여 보조스트림을 생성할 수 있다.
즉, 기존 스트림을 가져다가 특정 기능을 추가하여 업그레이드하는 것이다.

 

예시코드

FileInputStream fis = new FileInputStream("test.txt");
// 스트림 생성

BufferedInputStream bis = new BufferedInputStream(fis);
// fis 스트림을 이용하여 보조 스트림 생성

bis.read();
// 보조 스트림(BufferedInputStream)으로부터 데이터를 읽음
위 코드를 보면
보조 스트림인 BufferedInputStream이 입력 기능(read())를 수행하는 것처럼 보이지만,
사실 실제 입력기능은 해당 보조 스트림과 연결된 FileInputStream이 수행하는 것이고
BufferedInputStream은 버퍼 기능만 추가 제공한다.
버퍼를 사용한 입출력과 사용하지 않은 입출력은 성능차이가 상당하므로
일반적으로 버퍼를 사용한 보조 스트림을 사용한다.

 

 

바이트기반 스트림의 보조 스트림

 

위 메서드 모두

각각 FilterInputStream, FilterOutputStream 메서드의 자식이고

FilterInputStream, FilterOutputStream 또한 InputStream, OutputStream의 자식으로

결국 모든 보조 스트림은 InputStream과 OutputStream의 자식으로 입출력 방식은 동일하다.

 

 

문자기반 스트림의 보조 스트림

사용목적과 방식은 바이트기반 보조스트림과 동일하다.

--

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'Language > Java' 카테고리의 다른 글

[입출력] 문자기반 스트림, 보조 스트림  (0) 2025.02.12
[입출력] 바이트기반 스트림, 보조 스트림  (0) 2025.02.11
스트림 (Stream)  (1) 2025.01.14
람다식 (+ 메서드 참조, 함수형 인터페이스)  (0) 2025.01.12
스레드의 동기화  (1) 2025.01.09
  1. 입출력의 스트림은 무엇인가?
  2. 스트림 (Stream)
  3. 바이트기반 스트림  (InputStream, OutStream)
  4. 문자기반 스트림  (Reader, Writer)
  5. 보조 스트림
'Language/Java' 카테고리의 다른 글
  • [입출력] 문자기반 스트림, 보조 스트림
  • [입출력] 바이트기반 스트림, 보조 스트림
  • 스트림 (Stream)
  • 람다식 (+ 메서드 참조, 함수형 인터페이스)
아-니지
아-니지
아-니지
성장 기록.zip
아-니지
  • 분류 전체보기 (266)
    • Language (76)
      • Java (39)
      • Kotlin (0)
      • HTML (10)
      • CSS (17)
      • Java Script (10)
    • JPA (11)
    • Spring Boot (27)
    • QueryDSL (2)
    • SQL [DB] (8)
    • Docker (29)
    • AWS (19)
    • Git & GitHub (17)
    • DevOps (1)
    • Terminology (14)
    • CS (50)
      • 컴퓨터 구조 (12)
      • 운영체제 (11)
      • 자료구조 (11)
      • 알고리즘 (0)
      • 네트워크 (16)
    • Record (7)
      • 알고리즘 풀이 (4)
      • 자바 메서드 (3)
    • Self Q&A (5)
hELLO· Designed By정상우.v4.5.3
아-니지
입출력 (바이너리/문자 기반 스트림, 보조 스트림)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.