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
- 손가락귀신
정신 못차리면, 벌 받는다.
,