개요
이 포스팅은 자바에서 모든 입출력을 직접 다루지 않고, 스트림(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 | 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능 |
'프로그래밍 언어 > 자바' 카테고리의 다른 글
[자바] log4j 자바소스로 구현 (0) | 2021.09.15 |
---|---|
[자바] 로그(log)란? (2) | 2021.06.09 |
[자바] 문자열 클래스 - String / StringBuffer / StringBuilder의 차이점 (0) | 2021.05.22 |
[자바] 전달인자(Argument)와 매개변수(Parameter)의 차이점 (0) | 2020.04.01 |
[자바] 데이터 타입 ( 변수 선언시 고려할 사항) (1) | 2020.03.22 |