스트림(Stream)
- 자바에서 데이터는 스트림을 통해 입출력됨
- 프로그램이 데이터의 출발지인지 도착지인지의 여부에 따라 사용하는 스트림의 종류가 결정

입출력 스트림의 종류
바이트 기반 스트림
- 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력
문자 기반 스트림
최상위 클래스가 무엇인지에 따라 바이트 또는 문자 스트림인지 판단


바이트 출력 스트림: OutPutStream
- 바이트 기반 출력 스트림의 최상위 클래스
- 모든 바이트 기반 출력 스트림 클래스는 OutputStream 클래스 상속받음


write(int b) 메소드
- 매개 변수로 주어지는 int(4byte)에서 끝 1byte만 출력 스트림으로 보냄

write(byte[] b) 메소드
- 매개값으로 주어진 배열의 모든 바이트를 출력 스트림으로 보냄

write(byte[] b, int off, int len) 메소드
- 배열 b에서 b[off]에서부터 len개의 바이트만 출력 스트림으로 보냄

- 바이트 기반 입력 스트림의 최상위 클래스
- 모든 바이트 기반 입력 스트림은 InputStream 클래스 상속받아 만들어짐


- 입력 스트림으로부터 1byte 읽고 int(4byte) 타입으로 리턴
- 리턴된 4byte 중 끝 1byte에만 데이터 들어 있음
- 더 이상 입력 스트림으로부터 바이트 읽을 수 없게 되면 -1 리턴
읽을 수 있는 마지막 바이트까지 반복하여 1byte씩 읽을 수 있음

read(byte[]) 메소드
- 매개값으로 주어진 배열의 길이만큼 입력 스트림으로부터 바이트를 읽고 해당 배열에 저장
- 읽은 바이트 수를 리턴

InputSteam is = ...;
byte[] readBytes = new byte[100];
int readByteNo = is.read(readBytes);
read(byte[] b, int off, int len) 메소드
- 입력 스트림으로부터 len 개의 바이트를 읽고 바이트 배열에서 b[off]부터 len개 까지 저장
- 읽은 바이트 수인 len개 리턴

InputStream is = ...;
byte[] readBytes = new Bytes[100];
int readByteNo = is.read(readBytes, 0, 100);
문자 출력 스트림: Writer
- 문자 기반 출력 스트림의 최상위 클래스
- 모든 문자 기반 출력 스트림 클래스는 Writer 클래스를 상속받아 만들어짐


writer(int c) 메소드
- 매개 변수로 주어지는 int(4byte)에서 끝 2byte(1개 문자)만 출력 스트림을 보냄

write(char[]) 메소드
- 매개값으로 주어진 char[] 배열의 모든 문자를 출력 스트림으로 보냄

write(char[] cbuf, int off, int len) 메소드
- c[off]부터 len개의 문자를 출력 스트림으로 보냄

write(String str)와 write(String str, int off, int len) 메소드
- write(String str)은 문자열 전체를 출력 스트림으로 보냄
- wirte(String str, int off, int len)은 주어진 문자열 off순번 부터 len 개까지의 문자 보냄

문자열 입력 스트림: Reader
- 문자 기반 입력 스트림의 최상위 클래스
- 모든 문자 기반 입력 스트림은 Reader 클래스 상속받아 만들어짐


read() 메소드
- 입력 스트림으로부터 1개의 문자(2byte) 읽고 int(4byte) 타입으로 리턴
- 리턴된 4byte 중 끝 2byte에 문자 데이터 들어 있음

- read() 메소드가 리턴한 int 값 char 타입으로 변환하면 읽은 문자 얻을 수 있음
char charData = (char) read();
read(char[] cbuf) 메소드
- 매개값으로 주어진 문자 배열의 길이만큼 입력 스트림으로부터 문자를 읽고 배열에 저장
- 읽은 문자 수를 리턴

read(char[] cbuf, int off, int len) 메소드
- 입력 스트림으로부터 최대 len개의 문자만큼 읽고 문자열의 cbuf[off]부터 저장
- 실제로 읽은 문자 수 리턴

Reader reader = ...;
char[] chuf = new char[100];
int readCharNo = reader.read(chuf, 0, 100);
정리
- 입출력 스트림: 자바에서 데이터는 스트림을 통해 입출력됨. 프로그램이 출발지인지 도착지인지 여부에 따라 사용하는 스트림의 종류가 결정됨
- InputStream: 바이트 기반 입력 스트림의 최상위 클래스, 추상 클래스, 모든 바이트 기반 입력 스트림은 InputStream 클래스를 상속받아 만들어짐.
- OutputStream: 바이트 기반 출력 스트림의 최상위 클래스, 추상 클래스, 모든 바이트 기반 출력 스트림 클래스는 OutputStream 클래스 상속받아 만들어짐
- Reader: 문자 기반 입력 스트림의 최상위 클래스, 추상 클래스, 모든 문자 기반 입력 스트림은 Reader 클래스 상속받아 만들어짐
- Writer: 문자 기반 출력 스트림의 최상위 클래스, 추상 클래스, 모든 문자 기반 출력 스트림 클래스는 Writer 클래스 상속받아 만들어짐