데이터는 출발지에서 도착지로 흘러가고, 자바에서는 스트림을 통해 데이터가 입출력된다.

출발지 : 출력 스트림 사용 (데이터를 출력해야 하므로)

도착지 : 입력 스트림 사용 (흘러온 데이터를 입력받아야 하므로)

https://blog.kakaocdn.net/dn/bZ5gYD/btqGAgnULAR/AROx5ObbBND4VcwddsTwKk/img.png

1. 입출력 스트림(기본 스트림)

java.io 패키지에서 여러 스트림 클래스를 제공한다. 스트림은 크게 두 종류로 구분한다.

어떤 기반 스트림인지는 최상위클래스를 보고 구별할 수 있다.

아래 최상위 클래스는 모두 추상 클래스이다(추상클래스 복습 : new연산자를 이용해 객체생성할 수 없다.)

모든 바이트/문자 기반의 입출력 스트림은 해당 최상위 클래스를 상속받아서 만들어진다. 또한 아래의 최상위 클래스에는 입출력 스트림이 가져야 할 기본적인 메소드가 정의되어있다.

구분 바이트 기반 스트림 문자 기반 스트림
입력 스트림 출력 스트림 입력 스트림 출력 스트림
최상위 클래스 InputStream OutputStream Reader Writer
하위(자식) 클래스 예시 XXXInputStream XXXOutputStream XXXReader XXXWriter

예) 이미지 바이너리 파일의 입출력 스트림 클래스는 FileInputStream, FileOutputStream

예) 텍스트 파일의 입출력 스트림 클래스는 FileReader, FileWriter

1.1 바이트 기반 스트림

1.1.1 바이트 출력 스트림(OutputStream)

리턴 타입 메소드 설명
void write(int b) 1byte를 출력
void write(byte[] b) '매개값 배열 b'의 모든 바이트 출력
void write(byte[] b, int off, int len) '매개값 배열 b'의 인덱스 b[off]부터 시작해서len개까지의 바이트 출력
void flush() 출력 버퍼에 잔류하는 모든 바이트 출력
void close() 출력 스트림을 닫는다.