Week 13

2022. 9. 3. 22:00
728x90

목표

자바의 Input과 Ontput에 대해 학습하세요.

학습할 것 (필수)

  • 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O
  • InputStream과 OutputStream
  • Byte와 Character 스트림
  • 표준 스트림 (System.in, System.out, System.err)
  • 파일 읽고 쓰기

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

스트림은 쉽게 이야기해서 데이터를 운반하기 위해 사용되는 통로라고 생각하면 된다. 연속적인 데이터의 흐름을 물(Stream)에 비유해서 붙여진 이름이고, 하나의 스트림으로 입출력을 동시에 수행할 수 없다. 입출력을 동시에 수행하려면, 2개의 스트림이 필요하다. 즉, 입력을 하기 위해서도 스트림이 필요하고, 출력을 하기 위해서도 별도의 스트림이 하나 필요하다.

2. InputStream과 OutputStream

InputStream과 OutputStream은 바이트기반 입출력스트림의 최고 조상이다.

3. Byte와 Character 스트림

Stream을 이용해서 Byte와 Char형식으로 데이터를 주고 받을 수있다.
**Byte**

* 바이트기반 스트림(InputStream과 OutputStream을 구현한 스트림)

ByteArrayInputStream과 ByteArrayOutputStream은 바이트배열(byte[])에 데이터를 입출력하는 바이트기반 스트림
FileInputStream과 FileOutputStream은 파일에 데이터를 입출력하는 바이트기반 스트림

* 바이트기반 보조스트림(보조스트림을 닫으면 기반스트림도 닫힌다.)

FilterInputStream과 FilterOutputStream은 모든 바이트기반 보조스트림의 최고조상이다. 보조스트림은 자체적으로 입출력을 수행할 수 없다. 상속을 통해 FilterInputStream과 FilterOutputStream의 read()와 write()를 원하는 기능대로 오버라이딩해야 한다.
BufferedInputStream과 BufferedOutputStream은 입출력 효율을 높이기 위해 버퍼(byte[])를 사용하는 보조스트림
DataInputStream과 DataOutputStream은 기본형 단위로 읽고 쓰는 보조스트림이며, 각 자료형의 크기가 다르므로 출력할 때와 입력할 때 순서에 주의해야 함
SequenceInputStream은 여러 입력스트림을 연결해서 하나의 스트림처럼 다룰 수 있게 해주는 보조스트림
PrintStream은 데이터를 다양한 형식의 문자로 출력하는 기능을 제공하는 보조스트림이며, System.out과 System.err이 PrintStream이다.
PrintStream보다 PrintWriter을 사용할 것을 권장한다.

**Character**

*문자기반 스트림(Reader와 Writer을 구현한 스트림)

FileReader와 FileWriter는 문자기반의 파일 입출력. 텍스트 파일의 입출력에 사용한다.
PipedReader와 PipedWriter는 프로세스(쓰레드)간의 통신(데이터를 주고 받음)에 사용한다.
StringReader와 StringWriter는 CharArrayReader, CharArrayWriter처럼 메모리의 입출력에 사용한다.
StringWriter에 출력되는 데이터는 내부의 StringBuffer에 저장된다.

*문자기반 보조스트림

BufferedReader와 BufferedWritersms 입출력의 효율을 높이기 위해 버퍼(Byte[])를 사용하는 보조스트림. 라인 단위의 입출력이 편리하다.
InputStreamReader와 OutputStreamWriter는 바이트기반스트림을 문자기반스트림처럼 쓸 수 있게 해준다. 인코딩을 변환하여 입출력할 수 있게 해준다.

4. 표준 스트림 (System.in, System.out, System.err)

콘솔을 통한 데이터의 입출력을 ‘표준 입출력'이라 한다. JVM이 시작되면서 자동적으로 생성되는 스트림이다.
**System.in**
콘솔부터 데이터를 입력받는데 사용
**System.out**
콘솔로 데이터를 출력하는데 사용
**System.err**
콘솔로 데이터를 출력하는데 사용

5. 파일 읽고 쓰기

파일과 디렉토리도 다룰 수 있다.
RandomAccessFile은 하나의 스트림으로 파일에 입력과 출력을 모두 수행할 수 있는 스트림이며, 다른 스트림들과 달리 Object의 자손이다.

'Java & Spring > WhiteShip Study' 카테고리의 다른 글

Week 14  (2) 2022.09.10
Week 12  (0) 2022.08.27
Week 11  (0) 2022.08.20
Week 10  (0) 2022.08.13
Week 09  (0) 2022.08.06

BELATED ARTICLES

more