본문 바로가기

자바공부

스트림 입출력 Stream, 명품 자바 프로그래밍 8장

728x90
반응형

* 컴퓨터 공학에서 스트림(Stream)은 연속적인 데이터의 흐름 혹은 데이터를 전송하는 소프트웨어 모듈을 일컫는다.

자바에서 입출력 스트림은 응요프로그램과 입출력 장치를 연결하는 소프트웨어 모듈이다.

응용프로그램은 출력 입력 스트림과 연결하며, 입력 스트림은 키보드 장치를 제어하여 사용자의 키 입력을 받아 으용프로그램에게 전달한다. 

또한 응용프로그램은 출력 스트림에 전결하고 출력 스트림에 출력하면, 출력 스트림은 다른 끝단에 연결된 출력 장치를 제어하여 출력을 완성한다. 

스트림 입출력 방식에서, 자바 응용프로그램은 입출력 장치를 직접 제어하는 대신, 입출력 스틀미 객체와 연결하여 쉽게 데이터 입출력을 실핸한다.

스트림을 사용하지 않고 자바 응용프로그램이 입출력 장치를 직접 제어하는 코드를 작성하여 입출력을 실행하려 한다면, 응용프로그램 작성이 매우 어렵고, 하드웨어 구조나 제어가 다양한 입출력 장치를 모두 수용할 수 없게 될 것이다.

입출력 스트림의 역할

* 스트림(Stream)의 특징

1) 스트림의 양끝에는 입출력 장치와 자바 응용프로그램이 연결된다.

2) 스트림은 단방향이다.

3) 스트림의 기본 단위는 바이트나 문자이다.

4) 스트림은 FIFO(First In First Out) 구조이다.

 

* 자바의 문자 스트림, 바이트 스트림

자바에서 입출력 스트림은 문자 스트림(character stream)과 바이트 스트림(byte stream)의 2종류로 나눈다.

1) 문자 스트림은 문자 하나의 크기가 2바이트인 char 타입이며, 문자가 아닌 데이터가 출력되면 보이지 않거나 엉뚱한 기호가 출력된다.

2) 바이트 스트림은 바이트를 단위로 다루는 스트림으로, 스트림에 들어오고 나가는 정보를 단순 바이너리(비트들)로 다루기 때문에, 문자든 이미지든 상관없이 흘려보낸다.

 

* JDK에서 제공하는 자바의 입출력 스트림 클래스 계층구조

a) 바이트 스트림 클래스 계층 구조

바이트 스트림 클래스 계층 구조

b) 문자 스트림 클래스 계층 구조

문자 스트림 계층 구조

* 자바의 입출력 스트림 클래스는 java.io. 패키지에 포함되어 있다.

바이트 스트림을 다루는 클래스는 공통적으로 이름 뒤에 Stream을 붙이고, 문자 스트림을 다루는 클래스는 Reader/Writer를 붙여 구분한다.

 

* 스트림은 서로 연결될 수 있다.

* System.in과 InputStreamReader 스트림 객체를 연결하는 코드

InputStreamReader rd = new InputStreamReader(System.in);

문자 스트림 rd를 생성하고, 키보드와 연결된 표준 입력 스트림인 System.in을 연결한다.

System.in은 InputStream 타입으로 바이트 입력스트림이다.

두 스트림이 연결되면, System.in은 사용자의 키 입력을 받아 바이트 스트림으로 보내며, rd는 들어오는 바이트 스트림을 문자로 구성하여 응용프로그램에게 전달한다.

int c = rd.read(); // 입력 스트림으로부터 키 입력. c는 입력된 키의 문자 값

* rd는 연속적으로 들어오는 바이트들을 문자로 변환하고 문자를 응용프로그램에게 전달해준다.

반응형