스트림 데이터를 한 바이트나 한 문자 단위로 처리하지 않기 위해 다른 스트림들로 변환할 수 있습니다.
특수한 경우를 제외하고는 다음의 변환 규칙을 적용합니다.
입력 스트림 <-> 입력 스트림 계열
출력 스트림 <-> 출력 스트림 계열
바이트 스트림 <-> 바이트 스트림 계열
문자 스트림 <-> 문자 스트림 계열
특수한 경우란 아래와 같습니다.
입력 스트림 <-> 출력 스트림
바이트 스트림 <-> 문자 스트림
이 때는 InputStreamReader / OutputStreamWriter 를 사용하여 변환할 수 있습니다.
바이트 스트림 내에 바이트가 아닌 문자 데이터가 있어서 문자 단위로 핸들하고자 할 때 사용하면 되겠습니다.
import java.io.*; public class TransStreamMain { public static void main(String[] args) throws IOException { int i; System.out.println("종료를 원하면 끝 써봐!"); while( (i=System.in.read()) != '끝' ) { System.out.print((char)i); } } }
위 예는 InputStream인 System.in에서 1byte씩 읽어오는데, 2byte짜리 '끝'이란 문자를 읽을 수 없기 때문에 while 문을 빠져나올 수 없습니다. 이 때 System.in 을 문자 단위 스트림으로 변환하면 '끝'이란 문자를 사용하여 입력을 종료할 수 있습니다.
InputStreamReader isr = new InputStreamReader(System.in); while( (i=isr.read()) != '끝' ) { System.out.print( (char)i ); }
버퍼를 이용하여 속도를 향상시키는 변환 역시 위 방법과 유사합니다.
BufferedReader, BufferedWriter(Buffered 문자 스트림)
BufferedInputStream, BufferedOutputStream(Buffered 바이트 스트림)
BufferedReader는 readLine()을 제공하여 행 단위로 빠르게 읽습니다.
String temp; if( (temp=br.readline()) != null ) { System.out.println(temp); }
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.