스터디 18일차 14-1입출력 스트림
자바에서 데이터는 스트림을 통해 입출력
스트림 (stream): 단일 방향으로 연속적으로 흘러가는 것.
데이터는 출발지에서 도착지로 흐름.
프로그램이 도착지면 입력 스트림
출발지면 출력 스트림
<입출력스트림의 종류>
- 바이트(byte)기반 스트림 : 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력시 사용
- 입력 : InputStream(최상위 클래스, 추상)
- 출력 : OutStream(최상위 클래스, 추상)
- 문자(character)기반 스트림 : 문자 데이터를 읽고 출력할 때 사용
- 입력 : Reader(최상위 클래스, 추상)
- 출력 : Writer(최상위 클래스, 추상)
<바이트 기반 스트림의 주요 메소드>
- InputStream
(하위 클래스 : FileInputStream, BufferedInputStream, DataInputStream)
- read() 메소드 : 1byte를 읽고 int(4byte) 타입으로 리턴, 끝 1byte에만 데이터 지님.
- read(byte[ ] b) 메소드 : 매개값으로 주어진 배열의 길이만큼 바이트를 읽고 해당 배열에 저장, 읽은 바이트 수 리턴.
많은 양의 바이트를 읽을 때 사용하면 좋음. read()보다 읽는 횟수 현저히 ↓ - read(byte[ ] b, int off, int len) 메소드 : len개의 바이트를 읽고 매개값으로 주어진 배열에서 b[off]부터 len개까지 저장
그리고 읽은 바이트 수 리턴.
read(byte[ ] b)와 차이점 1) 한 번에 읽어들이는 바이트 수를 len으로 조절 가능
2) 배열에서 저장이 시작되는 인덱스 지정 가능 - close() : 입력 스트림을 닫음.
- OutputStream
(하위 클래스 : FileOutputStream, PrintStream, BufferedOutputStream, DataOutputStream)
- write(int b) 메소드 : 매개 변수로 주어진 int(4byte)의 끝 1byte만 출력
- write(byte[ ] b) 메소드 : 매개값으로 주어진 배열b의 모든 바이트를 출력
- write(byte[ ] b, int off, int len) 메소드 : 매개값으로 주어진 배열b[off]부터 len개까지의 바이트를 출력
- flush() : 내부 버퍼에 잔류된 바이트를 모두 출력
(출력스트림은 출력할 바이트를 바로 보내지x, 내부 버퍼(저장소에 우선 저장하기 때문) - close() : 출력 스트림을 닫음.
<문자 기반 스트림의 주요 메소드>
- Reader
(하위 클래스 : FileReader, BufferedReader, InputStreamReader)
- read() 메소드 : 1개의 문자(2byte)를 읽고 int(4byte)타입으로 리턴
4byte 중 끝 2byte에 문자데이터 존재 - read(char[ ] cbuf) 메소드 : 매개값으로 주어진 문자 배열의 길이만큼 문자 읽고 배열에 저장
그리고 읽은 문자 수를 리턴
많은 양의 문자 읽을 때 사용하면 좋음. 읽는 횟수 현저히 ↓ - read(char[ ] cbuf, int off, int len) 메소드 : len개의 문자 만큼 읽고 매개값으로 주어진 문자 배열에서
cbuf[off]부터 len개까지 저장. 읽은 문자 수 리턴 - close()
- Writer
(하위 클래스 : FileWriter, BufferedWriter, PrintWriter, OutputStreamWriter)
- write(int c) 메소드 : 매개 변수로 주어진 int(4byte)의 끝 2byte(1개 문자)만 출력
- write(char[ ] cbuf) 메소드 : 매개값으로 주어진 char[ ] 배열의 모든 문자를 출력
- write(char[ ] cbuf, int off, int len) 메소드 : c[off]부터 lent개의 문자를 출력
- write(String str) : 매개값으로 주어진 문자열을 출력
- write(String str, int off, int len) 메소드 : 주어진 문자열 off순번부터 len개까지의 문자 출력
- flush()
- close()
<확인문제>
1. 입출력 스트림에 대한 설명입니다. 맞는 것에 O표, 틀린 것에 X표 하세요.
①하나의 스트림으로 입력과 출력이 동시에 가능하다.( )
②프로그램을 기준으로 데이터가 들어오면 입력 스트림이다.( )
③프로그램을 기준으로 데이터가 나가면 출력 스트림이다.( )
④파일에 데이터를 저장하려면 출력 스트림을 사용해야 한다.( )
2. InputStream과 Reader에 대한 설명입니다. 맞는 것에 O표, 틀린 것에 X표 하세요.
①이미지 데이터는 InputStream 또는 Reader로 모두 읽을 수 있다.( )
②Reader의 read() 메소드는 1문자를 읽고 리턴한다.( )
③InputStream의 read() 메소드는 1byte를 읽고 리턴한다.( )
④InputStream의 read(byte[] b) 메소드는 읽은 바이트 수를 리턴한다.( )
3. InputStream의 read(byte[] b, int off, int len) 메소드에 대한 설명입니다.
맞는 것에 O표, 틀린 것에 X표 하세요.
①메소드의 리턴값은 읽은 바이트 수이다.( )
②첫 번째 매개값 b에는 읽은 데이터가 저장된다.( )
③두 번째 매개값 off는 첫 번째 매개값b에서 데이터가 저장될 시작 인덱스이다.( )
④세 번째 매개값 len은 첫 번째 매개값b에서 데이터가 저장될 마지막 인덱스이다.( )
4. 출력 스트림에서 데이터를 출력한 후 flush() 메소드를 호출하는 이유가 무엇입니까?
①출력 스트림의 버퍼에 있는 데이터를 모두 출력하고 버퍼를 비운다.
②출력 스트림을 메모리에서 제거한다.
③출력 스트림의 버퍼에 있는 데이터를 모두 삭제한다.
④출력 스트림을 닫는 역할을 한다.