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()을 이용해서 닫지 않아도 됨.
}
}
'예전 포스팅 모음' 카테고리의 다른 글
[java] FileInputStream과 FileOutputStream 사용 예제 (0) | 2014.08.26 |
---|---|
[java] break문을 사용하지 않고 switch문을 사용한 예제 (0) | 2014.08.25 |
[java] 다형성 (0) | 2014.08.13 |
[java] 제어자(modifier) (2) | 2014.08.12 |
[java] 상속 & 오버라이딩 (0) | 2014.08.11 |