소스 (일반복사)
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("data/lec13/test.mp4");
fos = new FileOutputStream("data/lec13/test1.mp4");
Timer t = new Timer();
t.start();
while(true) {
int ch = fis.read();
if(ch == -1) break;
fos.write(ch);
}
System.out.println("복사에 걸린 시간 : " + t.end());
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
결과
복사에 걸린 시간 : 64.483
소스 (배열을 활용한 복사)
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("data/lec13/test.mp4");
fos = new FileOutputStream("data/lec13/test2.mp4");
Timer t = new Timer();
t.start();
// 버퍼를 활용하자..
byte[] buf = new byte[1024 * 32];
while(true) {
// buf 공간만큼을 한꺼번에 읽고, 쓴다
// ch는 배열의 갯수가 입력된다
int ch = fis.read(buf);
if(ch == -1) break;
// 비어있는 데이터에는 0 및 공백으로 초기화가 되기 때문에, 쓰기시에는 0부터 값이 있는곳 만큼 해야 한다
// buf 배열의 0번째부터 배열의갯수만큼(ch) 쓰기
fos.write(buf, 0, ch);
}
System.out.println("복사에 걸린 시간 : " + t.end());
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
결과
복사에 걸린 시간 : 0.007
소스 (Buffered를 활용한 복사)
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
// Buffered의 사용은 File In/Output과 함께 사용되어야 한다
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
fis = new FileInputStream("data/lec13/test.mp4");
fos = new FileOutputStream("data/lec13/test2.mp4");
// buffered를 fis와 연결하여 사용
bis = new BufferedInputStream(fis);
/*
내부적으로 16k의 버퍼 공간을 가지고 있음
버퍼 공간이 가득 찼을때, 데이터를 넘겨줌
버퍼에 데이터가 가득 차지 않아도 강제 출력을 위해 flush(); 사용
close()를 하게 되도 동일한 처리가 됨
*/
bos = new BufferedOutputStream(fos);
Timer t = new Timer();
t.start();
while(true) {
// 버퍼를 활용한 사용
int ch = bis.read();
if(ch == -1) break;
bos.write(ch);
}
bos.flush();
System.out.println("복사에 걸린 시간 : " + t.end());
} catch (Exception e) {
e.printStackTrace();
}finally {
try { // fis를통해 열린 bis 먼저 close
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
try { // fos를 통해 열린 bos 먼저 close
// 내부적으로 닫기 전에 버퍼 공간에 있는 데이터를 출력한다 (bos.flush();)
// close 할 경우에는 flush 하지 않아도 됨
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
결과
복사에 걸린 시간 : 0.157
Java - IO, finnaly문 정리 (0) | 2018.10.02 |
---|---|
Java - IO, PrintWriter 사용 (0) | 2018.10.02 |
Java - IO, InputStream, OutputStream (0) | 2018.10.02 |
Java - IO, 파일 속성 확인 (0) | 2018.10.02 |
Java - IO, 디렉토리 하위의 목록 가져오기 (0) | 2018.10.02 |
댓글 영역