Tom's Note
반응형

개요

이 포스팅은 자바에서 모든 입출력을 직접 다루지 않고, 스트림(Stream)이라는 구조를 통해 데이터가 제어되는데 구조와 방향성을 설명하고 어떻게 사용하는지 명시한다.

 

1. I/O Stream

2. I/O Stream 종류

3. I/O Stream 구조


1. I/O Stream

단방향 통신을 지원하는 기능

서로 통신을 위한 Input Stream / Ouput Stream 2개의 Stream이 필요

일반적으로 2개의 Stream을 I/O Stream이라고 통칭

출발지에서 도착지로 데이터를 운반하는 연결 통로

 

I/O란?

내부 또는 외부 장치와 프로그램 간의 데이터를 전송가능케 하는 지점

Input / Output의 약자로 입출력이라 부름

예) 키보드, 모니터, 파일, 네트워크

 


 

Stream이란?

운영체제에 의해 생성되는 가상의 연결고리

물이 한 방향으로 연속적인 흐름을 가지는 형태

이를 데이터의 흐름과 같다는 의미에서 사용

데이터의 이상화된 흐름

데이터를 운반하는 연결통로

 


 

Stream의 흐름

큐(Queue)와 같은 선입선출(FIFO: First In First Out) 형태로 데이터가 전송

먼저 입력된 데이터가 먼저 출력되는 형태를 말한다.

 


 

I/O Stream의 구조

 

Source


Input Stream

데이터 조작

Output Stream

Destination

 

Source : 데이터 근원지

Input Stream : 자바 입력 통로

데이터 조작 : 사용자가 직접 핸들링하여 데이터를 조작하는 구간

Output Stream : 자바 출력 통로

Destination : 데이터 종착점

 

 


 

2. I/O Stream 종류

원래 하나만 존재했으나 다국어 지원을 통해 하나가 추가되어 2가지가 됨

영어는 한 문자당 1 Byte를 사용하고 다국어는 2 Byte를 사용

즉, 바이트 입출력 스트림, 문자 입출력 스트림의 2가지 종류를 가진다.

 

 

바이트 입출력 스트림 

1 byte 단위

영상, 음성, 영문자의 binary 데이터를 처리

 


 

문자 입출력 스트림 

2 Byte 단위

다국어만 사용가능(문자)

binary 데이터 처리 불가 

 

 

 


 

3. I/O Stream 구조

자바에서는 java.io 패키지를 통해 InputStream과 OutputStream 클래스를 별도로 제공함

즉, 자바에서의 스트림 생성이란? 스트림 클래스 타입의 인스턴스를 생성한다는 의미

 

바이트 입출력 스트림

바이트 기반 스트림: 데이터가 이동하는 통로를 직접 만드는 클래스

보조 스트림: 이미 만들어져 있는 통로에 새로운 기능을 추가하는 클래스

입력 스트림 출력 스트림 입출력 대상
(설명)
바이트 기반 스트림
FileInputStream FileOutputStream 파일
ByteArrayInputStream ByteArrayOutputStream 메모리
PipedInputStream PipedOutputStream 프로세스
AudioInputStream AudioOutputStream 오디오 장치
보조 스트림
FilterInputStream FilterOutputStream 필터를 이용한 입출력
BufferedInputStream BufferedOutputStream 버퍼를이용한 입출력
DataInputStream DataOutputStream 입출력 스트림으로부터 자바의 기본 타입으로 데이터를 읽음
ObjectInputStream ObjectOutputStream 데이터를 객체 단위로 읽거나, 역직렬화
SequenceInputStream X 두 개의 입력 스트림을 논리적으로 연결
PushbackInputStream X 다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능 추가
X PrintStream 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능

 

문자 입출력 스트림

문자 기반 스트림: 다국어 특성상 2 Byte를 사용하여 클래스 변경됨 

InputStream -> Reader

OutputStream -> Writer

보조 스트림: 이미 만들어져 있는 통로에 새로운 기능을 추가하는 클래스

입력 스트림 출력 스트림 입출력 대상
(설명)
문자 기반 스트림
FileReader FileWriter 파일
CharArrayReader CharArrayWriter 메모리
PipedReader PipedWriter 프로세스
StringReader StringWriter 문자열
보조 스트림
FilterReader FilterWriter 필터를 이용한 입출력
BufferedReader BufferedWriter 버퍼를 이용한 입출력
PushbackReader X 다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능을 추가
X PrintWriter 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능

 

반응형
profile

Tom's Note

@크크크크

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!