import java.io.*;
import java.util.Arrays;
class IOEx1
{
public static void main(String[] args)
{
byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
byte[] outSrc = null;
ByteArrayInputStream input = null;
ByteArrayOutputStream output = null;
input = new ByteArrayInputStream(inSrc);
output = new ByteArrayOutputStream();
int data = 0;
while((data = input.read())!=-1) {
output.write(data); // void write(int b)
}
outSrc = output.toByteArray();
System.out.println("Input Source :" + Arrays.toString(inSrc));
System.out.println("Output Source :" + Arrays.toString(outSrc));
}
}
바이트배열 incSrc의 데이터를 outSrc로 복사하는 예제이다. 바이트배열은 사용하는 자원이 메모리 밖에 없으므로 가비지컬렉터에 자동으로 자원을 반환하므로 close()를 이용해서 스트림을 닫지 않아도 된다.
read(), write(int b)를 사용하기 때문에 한 번에 1Byte만 읽고 쓰므로 작업효율이 떨어진다.
import java.io.*;
import java.util.Arrays;
class IOEx2
{
public static void main(String[] args)
{
byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
byte[] outSrc = null;
byte[] temp = new byte[10];
ByteArrayInputStream input = null;
ByteArrayOutputStream output = null;
input = new ByteArrayInputStream(inSrc);
output = new ByteArrayOutputStream();
input.read(temp,0,temp.length); // 읽어 온 데이터를 배열 temp에 담는다.
output.write(temp,5, 5); // temp[5]부터 5개의 데이터를 write한다.
outSrc = output.toByteArray();
System.out.println("Input Source :" + Arrays.toString(inSrc));
System.out.println("temp :" + Arrays.toString(temp));
System.out.println("Output Source :" + Arrays.toString(outSrc));
}
}
int read(byte[], int off, int len)와 void write(byte[], int off, int len)을 사용해서 byte배열을 사용하기 때문에 이전 예제에 비해 더 효율적이다.
import java.io.*;
import java.util.Arrays;
class IOEx3 {
public static void main(String[] args) {
byte[] inSrc = {0,1,2,3,4,5,6,7,8,9};
byte[] outSrc = null;
byte[] temp = new byte[4]; // 이전 예제와 배열의 크기가 다르다.
ByteArrayInputStream input = null;
ByteArrayOutputStream output = null;
input = new ByteArrayInputStream(inSrc);
output = new ByteArrayOutputStream();
try {
while(input.available() > 0) {
input.read(temp);
output.write(temp);
}
} catch(IOException e) {}
/*
try {
while(input.available() > 0) {
int len = input.read(temp); // 읽어 온 데이터의 개수를 반환한다.
output.write(temp, 0, len); // 읽어 온 만큼만 write한다.
}
} catch(IOException e) {}
*/
outSrc = output.toByteArray();
System.out.println("Input Source :" + Arrays.toString(inSrc));
System.out.println("temp :" + Arrays.toString(temp));
System.out.println("Output Source :" + Arrays.toString(outSrc));
}
}