본문 바로가기
스터디/2209_자바의정석

13주차 과제 : I/O

by Jeong.dev 2022. 11. 4.

📌 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O

입출력(I/O)

- 입력과 출력을 줄여 부르는 말

- 두 대상 간의 데이터를 주고 받는 것

 

 

스트림(Stream)

- 데이터를 운반(입/출력)하는데 사용되는 연결통로 

- 하나의 스트림으로 입출력 동시에 수행할 수 없음(입력스트림, 출력스트림 따로따로)

 

보조스트림

- 스트림의 기능을 향상시키거나 새로운 기능을 추가하기 위해 사용하는 것.

- 독립적으로 입출력 수행 불가

 

 

버퍼(Buffer)

- 데이터를 한 곳에 저장시킨 후 한번에 보내는 방식

 

 

채널(Channel)

- 비동기적으로 입출력 동시에 가능

 

 

 

📌 바이트기반 스트림

- 입출력의 단위가 1byte

- InputStream과 OutputStream은 모든 바이트기반 스트림의 조상이다.

- 바이트단위로 데이터를 전송하며 입출력 대상에 따라 아래와 같이 나뉜다.

바이트기반 스트림 종류

- Input(Output)Stream

- ByteArrayInput(output)Stream : 바이트배열에 데이터를 입출력 하는데 사용되는 스트림

 

 

바이트기반 보조스트림

- FilterInput(Output)Stream : 모든 바이트기반 보조스트림의 최고조상

- BufferInput(Output)Stream : 입출력 효율을 높이기 위해 버퍼를 사용하는 보조스트림

- DataInput(Output)Stream : 기본형 단위로 읽고 쓰는 보조스트림

- SequenceInputStream : 여러 입력스트림을 연결해서 하나의 스트림처럼 다룰 수 있게 함

- PrintStream: 데이터를 다양한 형식의 문자로 출력하는 기능을 제공하는 보조스트림

 

 

📌 문자기반 스트림

- 입출력의 단위가 2byte

- 문자기반 스트림은 단순히 2byte 스트림 처리만을 의미하는 것이 아니라 + 인코딩을 포함한다.

  문자기반 스트림은 자바에서 사용하는 유니코드간의 변환을 자동적으로 처리해준다.

- Reader, Writer은 모든 문자기반 스트림의 조상이다.

 

 

문자기반 스트림 종류

- Reader, Writer

- FileReader, FileWriter : 문자기반 파일 입출력

- PipedReader(Writer) : 프로세스 간의 통신에 사용

- StringReader(Writer) : 메모리 입출력에 사용

 

 

문자기반 보조스트림

- BufferedReader(Writer) : 입출력 효율을 높이기 위해 버퍼를 사용하는 보조스트림

- InputStreamReader, OutputStreamWriter : 바이트기반 스트림을 문자기반 스트림처럼 쓸 수 있게 해줌

- DataInput(Output)Stream : 기본형 단위로 읽고 쓰는 보조스트림

- SequenceInputStream : 여러 입력스트림을 연결해서 하나의 스트림처럼 다룰 수 있게 함

- PrintStream: 데이터를 다양한 형식의 문자로 출력하는 기능을 제공하는 보조스트림

 

 

 

📌 표준 입출력 (System.in, System.out, System.err)

표준 입출력

- 콘솔을 통한 데이터의 입출력

- JVM이 시작되면서 자동적으로 생성되는 스트림

 

 

System.in : 콘솔로부터 데이터를 입력받는데 사용

System.out : 콘솔로 데이터를 출력하는데 사용

System.err : 콘솔로 데이터를 출력하는데 사용

 

 

 

 

[참고]

- 자바의 정석

- https://b-programmer.tistory.com/268

'스터디 > 2209_자바의정석' 카테고리의 다른 글

12주차 과제 : 애너테이션  (0) 2022.10.25
11주차 과제 : Enum  (0) 2022.10.18
10주차 과제 : 멀티쓰레드 프로그래밍  (0) 2022.10.18
8주차 과제 : 인터페이스  (0) 2022.10.11
7주차 과제 : 패키지  (0) 2022.10.06

댓글