2023. 3. 5. 21:54ㆍProgramming/Java
1. 입출력이란?
컴퓨터 내부 또는 외부 장치와 프로그램간의 데이터를 주고받는 것을 말한다.
2. 스트림(Stream)이란?
스트림이란 데이터를 운반하는데 사용되는 연결통로이다.
스트림은 단방향통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다. 그래서 입력과 출력을 동시에 수행하려면 입력을 위한 입력스트림(input stream)과 출력을 위한 출력스트림(output stream), 모두 2개의 스트림이 필요하다.
3. 바이트기반 스트림 - InputStream, OutStream
스트림은 바이트 단위로 데이터를 전송하며 입출력 대상에 따라 다음과 같은 입출력스트림이 있다.
이들 모두 InputStream 또는 OutStream의 자손들이며, 각각 읽고 쓰는데 필요한 추상메소드를 자신에 맞게 구현해 놓는다.
입력스트림 | 출력스트림 | 입출력 대상의 종류 |
FileInputStream | FileOutputStream | 파일 |
ByteArrayInputStream | ByteArrayInputStream | 메모리(byte배열) |
PipedInputStream | PipedOutputStream | 프로세스 (프로세스간의 통신) |
AudioInputStream | AudioInputStream | 오디오 장치 |
4. 보조 스트림
보조스트림은 실제 데이터를 주고받는 스트림이 아니기 때문에 데이터를 입출력할 수 있느 기능은 없지만 스트림의 기능을 향상시키거나 새로운 기능을 추가할 수 있다.
보조스트림 역시 결국엔 InputStream과 OutputStream의 자손들이므로 입출력 방법이 같다.
입력 | 출력 | 설명 |
FilterInputStream | FilterOutputStream | 필터를 이용한 입출력 처리 |
BufferedInputStream | BufferedOutputStream | 버퍼를 이용한 입출력 처리 |
DataInputStream | DataOutputStream | int, float와 같은 기본형 단위(primitive type)로 데이터를 처리하는 기능 |
SequenceInputStream | 없음 | 두 개의 스트림을 하나로 연결 |
LineNumberInputStream | 없음 | 읽어 온 데이터의 라인 번호를 카운트 (JDK1.1부터 LineNumberReader로 대체) |
ObjectInputStream | ObjectOutputStream | 데이터를 객체단위로 읽고 쓰는데 사용. 주로 파일을 이용하며 객체 직렬화와 관련있음 |
없음 | PrintStream | 버퍼를 이용하며, 추가적인 print관련 기능 (print, printf, println메서드) |
PushbackInputStream | 없음 | 버퍼를 이용해서 읽어 온 데이터를 다시 되돌리는 기능 (unread, push back to buffer) |
5. 문자기반 스트림 - Reader, Writer
Java에서는 한 문자를 의미하는 char형이 1byte가 아니라 2byte이기 때문에 바이트기반의 스트림으로 2byte인 문자를 처리하는 데는 어려움이 있다.
이 점을 보완하기 위해서 문자기반의 스트림이 제공된다. 문자 데이터를 입출력할 때는 바이트기반 스트림 대신 문자기반 스트림을 사용한다.
InputStream -> Reader
OutputStream -> Writer
출처 - 자바의 정석
'Programming > Java' 카테고리의 다른 글
래퍼(wrapper) 클래스 (0) | 2023.02.19 |
---|---|
java ... parameter (매개변수) (0) | 2020.12.06 |