JAVA I/O Stream

sith-call.dev·2021년 12월 2일
1

Java

목록 보기
4/6
post-thumbnail

기본적인 컨셉

OutputStream이나 Writer는 Destination에 해당하는 파일에 Data를 넣어준다. 이때 Output이란 이름이 붙은 이유는 내 입장에선 Data가 밖으로 나가기 때문이다.(순전히 내 생각) Input도 마찬가지이다. Reader라는 이름이 붙은 이유도 내 입장에선 해당 파일의 내용을 읽는 것이기 때문이고, Writer도 내 입장에선 해당 파일에 데이터를 작성하는 것이기 때문에 이러한 이름이 붙은 것이다.

그리고 여기서 빨간색 원 안에 있는 것들이 스트림 객체이고, 파란색 부분은 개발자가 설정해주는 부분이다. 이때 스트림 객체에 있는 read나 write 메소드를 통해서 데이터가 처리된다.

다루는 데이터

Byte(8 bit)

InputStream, OutputStream과 이것들의 하위 클래스는 전송하는 데이터가 byte이다.

Character(16 bit)

Reader,Writer와 이것들이 하위 클래스들은 전송하는 데이터가 16 비트의 문자이다.

확실치는 않다.

스트림 종류

기반 스트림

데이터와 직접 입출력하는 스트림

보조 스트림

기반 스트림에 추가적인 기능을 부여하는 클래스이다.

형식

스트림은 해당 스트림의 이름을 통해서 기능을 파악할 수 있다.

대상+스트림종류

스트림의 대상이 되는 자료형과 스트림 종류를 파악할 수 있다.
(예시로 든 스트림들은 모두 기반 스트림이다.)
1. FileWriter
2. OutputStreamWriter
3. FileReader
4. InputStreamReader
5. FileInputStream
6. ByteArrayInputStream
7. FileOutputStream
8. ByteArrayOutputStream

옵션+스트림종류

어떤 옵션을 부여하는지 이름을 보고 파악할 수 있다.
1. BufferedWriter
2. BufferedReader
3. FilterInputStream
4. FilterOutputStream

Buffered 옵션이 붙은 경우에는 스트림에 버퍼 메모리를 제공한다. 그래서 버퍼 메모리 단위로 입출력이 가능해진다.
(readlines(), write 메소드로 버퍼 메모리 사용가능.)

응용

코드를 보면서 스트림의 응용을 살펴본다. 간단히 말하자면, 스트림이 연결되어 파이프라인과 같은 것을 만들 수 있다.


in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

위의 코드를 분석해본다.

socket.getInputStream()

new InputStreamReader(socket.getInputStream())

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

profile
Try again, Fail again, Fail better

0개의 댓글