[java] ByteArrayInputStream과 ByteArrayOutputStream 사용 예제

ByteArrayInputStream과 ByteArrayOutputStream 사용 예제

 

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class Study {

 public static void main(String[] args) {

 /*
  * 바이트배열의 데이터를 복사한다.
  */
 byte []inSrc = {0,1,2,3,4,5,6,7,8,9};
 byte []outSrc = null;

 // 예제B. 한 번에 배열의 크기만큼 읽고 쓸 수 있게 temp선언.
 byte []temp = new byte[10];

 byte []tmp = new byte[4];

 ByteArrayInputStream input = null;
 ByteArrayOutputStream output = null;

 input = new ByteArrayInputStream(inSrc);
 output = new ByteArrayOutputStream();

 // 예제C. read(),write()이 IOException 발생시킬 수 있기 때문에 try-catch문으로 감싸줌
 try{
 	while(input.available() > 0){  // 블러킹(데이터 읽어올 때 데이터 기다리기 위해 멈춰있는 것 ex.입력 대기 상태)없이 일어 올 수 있는 바이트의 수 반환.
 		int len = input.read(tmp);
 		output.write(tmp, 0, len);  // 범위 지정 or output.write(tmp);
 		System.out.println("tmp : "+Arrays.toString(tmp));
 	}
 } catch(IOException e){
 	e.printStackTrace();
 }

 // 예제B.
 /*input.read(temp, 0, temp.length);
 output.write(temp, 2, 5);  // (b(data),off(start offset),len(the number of bytes to write))
*/ 
 // 예제A. read() 한 번에 1byte만 읽고 쓰므로 효율 gg
 /*int data = 0;
 while((data = input.read()) != -1){
 output.write(data);
 }*/

 outSrc = output.toByteArray();  // 스트림의 내용을 byte배열로 반환한다.

 System.out.println("input : "+Arrays.toString(inSrc));
 // System.out.println("temp : "+Arrays.toString(temp));
 System.out.println("lase tmp :"+Arrays.toString(tmp));
 // 
 System.out.println("output :"+Arrays.toString(outSrc));

 // 바이트 배열은 사용하는 자원이 메모리 밖에 없으므로 가비지컬렉터에 의해 자동적으로 자원을 반환하므로 close()을 이용해서 닫지 않아도 됨.
 }
}