Memory Stream

Programming/Java 2013. 2. 17. 23:37

Memory 스트림은 메모리를 스트림처럼 사용할 수 있게 하며, 목표지점이 메모리입니다.
프로그램에서 사용하는 메모리는 배열과 문자열 등이 있습니다.
메모리의 출력 스트림은 메모리를 그 대상으로 하기 때문에 목표지점을 생략해도 되며,
동적으로 메모리 크기를 늘려주기 때문에 크기를 알 수 없는 배열의 출력에 사용하면 좋습니다.

 

바이트 배열을 이용하는 입력 스트림 : ByteArrayInputStream
바이트 배열을 이용하는 출력 스트림 : ByteArrayOutputStream
문자 배열을 이용하는 입력 스트림 : CharArrayReader
문자 배열을 이용하는 출력 스트림 : CharArrayWriter
문자열을 이용하는 입력 스트림 : StringReader
문자열을 이용하는 출력 스트림 : StringWriter

 

아래의 예는 바이트 배열로 메모리를 사용하지만, 문자/문자열도 사용방법은 유사합니다.

import java.io.*;
public class ByteArrayStreamMain {
	public static void main(String[] args) throws IOException {
		int i;
		byte[] arr = {'o','o','p','s','4','u'};

		// ByteArray Stream
		ByteArrayInputStream bai = new ByteArrayInputStream(arr);
		ByteArrayOutputStream bao = new ByteArrayOutputStream();

		// arr 배열을 ByteArrayOutputStream 에 기록
		while( (i=bai.read()) != -1 ) {
			bao.write(i);
		}

		System.out.println( arr );	// [@811c88
		System.out.println( bai );	// java.io.ByteArrayInputStream@785d65
		System.out.println( bao );	// oops4u

		// Byte 배열 얻기
		byte[] res = bao.toByteArray();
		for( i=0; i<res.length; i++ ) {
			System.out.print( (char)res[i] );	//oops4u
		}

		bai.close();
		bao.close();
	}
}

 

위에서 bao 만 출력해도 기록된 모든 바이트 배열이 출력되는데,
굳이 toByteArray() 로 다시 배열을 만들고 for 문으로 돌려서 출력하는 이유는?;;

 

문자열을 이용한 출력 스트림인 StringWriter 에 기록된 데이터는
toString() / getBuffer() 등의 메소드를 이용하여 얻어낼 수도 있습니다.

sw.toString();
sw.getBuffer();

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,