목차
파일 Copy (바이트기반 입/출력)
💡 학습 목표
1. 바이트 단위의 기반스트림 파일 입력,출력 스트림 사용.
2. 보조 스트림 활용
1. 바이트 단위의 기반스트림 파일 입력,출력 스트림 사용.
시나리오 코드 1 : 기반 스트림인 파일 입력,출력 스트림을 사용
package io.file.ch03;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileCopy {
public static void main(String[] args) {
// 스트림은 기본적으로 단방향이다.
// 입력 스트림, 출력 스트림 두개가 필요하다
// 파일 경로 (복사할 대상)
String sourceFilePath = "C:/Users/KDP/Downloads/a.zip";
// 목적지 파일
String destinationFilePath = "cop1.zip";
// 소요시간 확인
long startTime = System.nanoTime();
try (FileInputStream fis = new FileInputStream(sourceFilePath);
FileOutputStream fos = new FileOutputStream(destinationFilePath)) {
int data;
while ((data = fis.read()) != -1) {
// 파일의 출력
fos.write(data);
}
System.out.println("입력 스트림 --> 출력스트림 --> 입력 --> 출력의 반복 완료");
} catch (Exception e) {
// TODO: handle exception
}
long endTime = System.nanoTime();
long duration = endTime - startTime;
System.out.println("복사의 소요 시간은 : " + duration);
// 소요 시간을 초 단위로 변환 --> 포맷팅
double seconds = duration/ 1_000_000_000.0;
// String 클래스의 format 메서드 사용해보기
String resultFormat = String.format("소요 시간은 : %.6f초 입니다.", seconds);
// % 는 포맷 지정자의 시작
// f 지정자는 float, double 유형의 변수를 인자로 받아 처리하겠다.
System.out.println(resultFormat);
}
}
2. 보조스트림 활용
시나리오 코드 2 : 보조 스트림 활용
package io.file.ch03;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class BufferedFileCopy {
public static void main(String[] args) {
// (바이트 기반 스트림을 활용)
// 기반 스트림 + 보조 스트림을 활용해서 파일 복사 기능을 만들고
// 소요 시간을 측정하시오
// 파일 경로 (복사할 대상)
String sourceFilePath = "C:/Users/KDP/Downloads/a.zip";
// 목적지 파일
String destinationFilePath = "cop1.zip";
// 소요시간 확인
long startTime = System.nanoTime();
try (FileInputStream fis = new FileInputStream(sourceFilePath);
FileOutputStream fos = new FileOutputStream(destinationFilePath);
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
int data;
while ((data = bis.read()) != -1) {
// 파일의 출력
bos.write(data);
}
System.out.println("입력 스트림 --> 출력스트림 --> 입력 --> 출력의 반복 완료");
} catch (Exception e) {
// TODO: handle exception
}
long endTime = System.nanoTime();
long duration = endTime - startTime;
double seconds = duration / 1_000_000_000.0;
String resultFormat = String.format("소요 시간은 : %.6f초 입니다.", seconds);
// % 는 포맷 지정자의 시작
// f 지정자는 float, double 유형의 변수를 인자로 받아 처리하겠다.
System.out.println(resultFormat);
}
}
결과
약 30배 정도의 시간 차이 발생
'Java > Java 유용한 클래스' 카테고리의 다른 글
문자 기반 스트림 - 13 (0) | 2024.05.17 |
---|---|
정렬된 수에서 하나의 수의 위치 찾기(이진 탐색) (0) | 2024.05.16 |
파일 출력 스트림(바이트 기반) - 11 (0) | 2024.05.16 |
파일 입력 스트림(바이트 기반) - 10 (0) | 2024.05.14 |
표준 입출력이란? - 9 (0) | 2024.05.14 |