InputStream OutputStream에 관련
public static void main(String[] args) {
//왜 io프로그래밍 순서가 중요하냐! close가 중요하기 때문이다.
//현재 시간을 long으로 변환
long start = System.currentTimeMillis();
//첫번째는 io관련 객체를 선언함
InputStream in = null;
OutputStream out = null;
try{
//InputStream 이나 OutputStream의 자손중에서 주인공의 인스턴스가 나온다.
//근데 1바이트씩 읽고 1바이트씩 쓰는건 오래걸린다.
/*in = new FileInputStream("c:/temp/SDSProxy.exe");
out = new FileOutputStream("c:/temp/sdspp.exe");
int data = -1;
while((data = in.read())!=-1){
out.write(data);
}*/
//따라서 아래와 같이 하면 편하다
/*in = new FileInputStream("c:/temp/SDSProxy.exe");
out = new FileOutputStream("c:/temp/sdspp.exe");
byte[] buffer = new byte[1024]; //너무 크게잡으면 메모리는 많이 사용하고 속도는 별 상향이 없다. 보통 1024의 배수로 잡아줌.
int readCount = -1;
while((readCount = in.read(buffer)) != -1){
out.write(buffer,0,readCount); //버퍼읽어들인 값만큼 1050바이트가 있으면 26바이트가 남을수 있으니까
}*/
//이건 바이트 1,2,3 저장하는것
/*byte[] data = new byte[]{(byte)1,(byte)2, (byte)3};
in = new ByteArrayInputStream(data);*/
//이건 바이트로 꺼내오는것
/*in = new FileInputStream("c:/temp/SDSProxy.exe");
out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024]; //너무 크게잡으면 메모리는 많이 사용하고 속도는 별 상향이 없다. 보통 1024의 배수로 잡아줌.
int readCount = -1;
while((readCount = in.read(buffer)) != -1){
out.write(buffer,0,readCount); //버퍼읽어들인 값만큼 1050바이트가 있으면 26바이트가 남을수 있으니까
}
ByteArrayOutputStream bao = (ByteArrayOutputStream)out;
byte[] data = bao.toByteArray();
for(int i = 0 ; i<data.length ; i++){
System.out.println(data[i]);
}*/
}catch(Exception e){
e.printStackTrace();
}finally{
if(out!=null){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(in!=null){
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}//end main