입출력(I/O)
바이트 기반 스트림
어느 한쪽에서 다른 한쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데
이것을 스트림이라고 한다.
스트림은 "단방향 통신"만 가능하기 때문에 하나의 스트림으로 입출력을 동시해 처리할 수 없다. 스트림은 "큐"와 같은 FIFO 구조로 되어 있다고 생각 하면 쉽다.
스트림은 바이트단위로 데이터를 전송하며 입출력 대상에 따라 입출력 스트림이 있다.
입력스트림 | 출력 스트림 | 입출력 대상 |
FileInputStream | FileOutputStream | 파일 |
ByteArrayInputStream | ByteArrayOutputStream | 메모리(byte 배열) |
PipedInputStream | PipedOutputStream | 프로세스(프로세스 간 통신) |
AudioInputStream | AudioOutputStream | 오디오장치 |
보조 스트림
스트림의 기능을 보완하기 위한 보조스트림이다. 실제 데이터를 주고받는 스트림이 아니기 때문에 데이터를 입출력 할 수 있는 기능은 없으나, 스트림의 기능을 향상시키거나 새로운 기능을 추가할 수 있다.
코드로 보면 보조스트림이 입력기능을 수행하는 것처럼 보이지만 실제 입력은 보조스트림과 연결된 FileInputStream 이 입력을 수행하고 보조 스트림은 버퍼만 제공한다.
보조스트림의 종류
입력 | 출력 | 설명 |
FilterInputStream | FilterOutputStream | 필터를 이용한 입출력 |
BufferedInputStream | BufferedOutputStream | 버퍼를 이용한 입출력 성능 향상 |
DataInputStream | DataOutputStream | int, float 와 같은 기능형 단위로 데이터를 처리 |
SequenceInputStream | SequenceOutputStream | 두 개의 스트림을 하나로 연결 |
LineNumberInputStream | - | 읽어 온 데이터 라인 번호를 카운트 |
ObjectInputStream | ObjectOutputStream | 데이터를 객체 단위로 읽고 쓰는데 사용. 주로 파일을 이용해 객체 직렬화와 관계 있음 |
- | PrintStream | 버퍼를 이용하며, 추가적인 print 기능 |
PushbackInputStream | - | 버퍼를 이용해 읽어 온 데이터를 다시 되돌림 |
문자기반 스트림
바이트 기반은 입출력의 단위가 1바이트다. java 에서는 char 형이 2 바이트이기 때문에 바이트 기반 스트림으로 2바이트인 문자를 처리하는데 어려움이 있다.
이 점을 보완하기 위해 문자기반 스트림이 제공된다. 문자데이터를 입출력 할 때는 바이트기반 대신 문자 기반 스트림을 사용하면 된다.
바이트기반 스트림 | 문자기반 스트림 |
FileInputStream FileOutputStream | FileReader FileWriter |
ByteArrayInputStream ByteArrayOutputStream | CharArrayReader CahrArrayWriter |
PipedInputStream PipedOutputStream | PipedReader PipedWriter |
StringBufferInputStream StringBufferOutputStream | StringReader StringWriter |
'개발 > JAVA' 카테고리의 다른 글
replaceall 특정문자를 제거해 준다. (0) | 2018.02.10 |
---|---|
배열을 리스트로 넣기 (0) | 2018.02.10 |
StringBuffer 클래스 (0) | 2018.02.10 |
String 클래스 (0) | 2018.02.10 |
객체지향 프로그래밍 (0) | 2018.02.10 |