입출력 스트림
스트림 입출력
- 스트림(Stream): 연속적인 데이터의 흐름 or 데이터를 전송하는 소프트웨어 모듈
- 자바에서 입출력 스트림은 응용프로그램과 입출력 장치를 연결
- 응용프로그램은 입력 스트림과 연결
- 입력 스트림은 키보드 장치를 제어하여 사용자의 키 입력을 받아 응용프로그램에 전달
- 응용프로그램은 출력 스트림과 연결, 출력 스트림에 출력
- 출력 스트림은 다른 끝에 연결된 출력 장치를 제어하여 출력 완성
>>자바 응용프로그램은 입출력 장치를 직접 제어하는 대신 입출력 스트림 객체와 연결하여 데이터 입출력을 쉽게 실행
스트림을 사용하지 않고 자바 응용프로그램이 입출력 장치를 직접 제어했다면, 응용프로그램 작성과 다양한 입출력 장치 사용이 어려웠을 것
입출력 스트림의 특징
1. 스트림의 양 끝에는 입출력 장치와 자바 응용프로그램이 연결
- 자바 응용프로그램은 입력 스트림과 출력 스트림과만 연결
- 입출력 스트림이 입출력 장치를 제어, 실질적인 입출력을 담당
2. 스트림은 단방향
- 입력 스트림은 입력 장치에서 응용프로그램으로 데이터 전송
- 출력 스트림은 응용프로그램으로부터 받은 데이터를 출력 장치로 전송
- 두 가지 기능을 모두 가진 스트림 존재x
3. 스트림을 통해 이동하는 기본 단위는 바이트 또는 문자
- 자바의 스트림 객체는 바이트 스트림과 문자 스트림
- 바이트 스트림: 바이트 단위로 입출력
- 문자 스트림: 문자 단위로 입출력
4. 스트림은 FIFO(first in first out) 구조
- 먼저 들어온 데이터가 먼저 출력
바이트 스트림과 문자 스트림
문자 스트림
- 문자만 다룸
- 문자가 아닌 데이터가 출력되면 보이지 않거나 잘못된 값이 출력
- 문자가 아닌 데이터가 입력되면 잘못된 문자가 전달
바이트 스트림
- 바이트를 단위로 다룸
- 스트림에 출입하는 정보를 단순 바이너리(비트들)로 다룸
- 문자이든 이미지 바이트든 상관없이 전달
스트림 클래스
- 자바 플랫폼은 스트림 입출력을 할 수 있는 다양한 클래스 제공
- java.io 패키지에 포함
- 바이트 스트림 클래스는 Stream으로 끝남
- 문자 스트림 클래스는 Reader/Writer로 구분
- 문자로만 이루어진 파일(텍스트 파일이나 자바 소스 파일 등)을 읽고 쓰는 경우 문자/바이트 스트림 클래스 모두 가능
- 이미지나 오디오/비디오 파일 데이터는 바이너리 정보이므로 반드시 바이트 스트림 클래스 사용
스트림 연결
- 스트림은 서로 연결될 수 있음
InputStreamReader rd = new InputStreamReader(System.in);
//표준 입력 스트림인 System.in과 InputStreamReader 스트림 객체를 연결
- 바이트 스트림과 문자 스트림을 연결하여 사용
- 문자 스트림 rd를 생성, 키보드와 연결된 표준 입력 스트림인 System.in을 연결
- System.in은 사용자의 키 입력을 받아 바이트 스트림으로 내보냄
- rd는 들어오는 바이트 스트림을 문자로 구성하여 응용프로그램에게 전달
int c = rd.read(); //입력 스트림으로부터 키 입력
- 자바 응용프로그램은 rd.read()를 통해 사용자가 입력한 문자를 읽을 수 있음