Stream 변환

Programming/Java 2013. 2. 18. 00:05

스트림 데이터를 한 바이트나 한 문자 단위로 처리하지 않기 위해 다른 스트림들로 변환할 수 있습니다.

 

특수한 경우를 제외하고는 다음의 변환 규칙을 적용합니다.
입력 스트림 <-> 입력 스트림 계열
출력 스트림 <-> 출력 스트림 계열
바이트 스트림 <-> 바이트 스트림 계열
문자 스트림 <-> 문자 스트림 계열

 

특수한 경우란 아래와 같습니다.
입력 스트림 <-> 출력 스트림
바이트 스트림 <-> 문자 스트림
이 때는 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
손가락귀신
정신 못차리면, 벌 받는다.

,