입출력 스트림이 뭔데?
자바에서 입출력 스트림은 응용프로그램과 입출력장치를 연결하는 소프트웨어 모듈로, 입출력 장치와 응용프로그램 사이에서 데이터가 순서대로 전송되도록 한다.
스트림의 양끝에는 응용프로그램과 장치가 연결되므로, 응용프로그램은 키보드나 스크린에 직접 입출력할 필요 없이, 입출력 스트림 객체를 생성하고 스트림을 통해 쉽게 입출력할 수 있다. 자바에서는 입력스트림과 출력스트림으로 나누어지며, 입출력을 동시에 하는 스트림은 없다. 스트림 입출력의 기본 단위는 바이트이며, 선입선출 방식으로 들어오는 순서대로 전달한다.
바이트 스트림과 문자 스트림
자바에서 입출력 스트림은 문자스트림과 바이트스트림으로 나눈다.
문자스트림은 문자만 다룰 수 있기 때문에 문자가 아닌 데이터가 문자 출력 스트림에 출력되면 출력이 보이지 않거나 엉뚱한 기호가 출력되며, 문자가 아닌 정보가 문자 스트림에 입력되면 응용프로그램에 엉뚱한문자가 전달되는 오류가 발생한다.
바이트 스트림은 바이트를 단위로 다루는 스트림으로서, 스트림에 들어오고 나가는 정보를 단순 바이너리로 다루기 때문에, 문자이든 이미지 바이트든 상관없이 흘려보낸다.
자바 플랫폼은 바이트 스트림이나 문자 스트림으로 입출력할 수 있는 다양한 클래스를 제공하며, 이들은 java.io 패키지에 포함되어 있다. 바이트 스트림을 다루는 클래스는 이름 뒤에 Stream을 붙이고, 문자 스트림을 다루는 클래스는 Reader / Writer를 붙여서 구분한다.
메모장으로 작성된 텍스트 파일이나 자바 소스 파일 같이 문자들로만 이루어진 파일을 읽고 쓰는 경우, 문자 스트림 클래스나 바이트 스트림 클래스 모두 사용 가능하지만, 이미지나 오디오, 비디오 파일의 경우, 단순 바이너리로 처리해야 하므로 반드시 바이트 스트림 클래스를 사용해야한다.
스트림 연결
스트림은 서로 연결하여 사용할 수 있다. 바이트 스트림과 문자 스트림을 연결하여 사용해보자.
InputStreamReader rd = new InputStreamReader(System.in);
이 코드는 바이트 스트림인 System.in을 키보드에 연결하고, 다시 System.in을 문자스트림 rd를 생성하여 연결한다. 이렇게 두 스트림이 연결되면 System.in은 사용자의 키 입력을 바이트 스트림으로 내보내며, rd는 입력되는 바이트 스트림을 문자로 구성하여 응용프로그램에게 전달한다. 자바 응용프로그램은 다음과 같이 rd.read()를 통해 입력된 키의 문자 값을 읽을 수 있다.
'JAVA > 입출력 스트림과 파일 입출력' 카테고리의 다른 글
05. 파일 복사 응용프로그램 작성 (0) | 2024.03.14 |
---|---|
04. File 클래스 (0) | 2024.03.14 |
03. 바이트 스트림과 바이너리 파일 입출력 (0) | 2024.03.14 |
02. 문자 스트림과 텍스트 파일 입출력 (0) | 2024.03.14 |