BufferedStream
package ex6_bufferedStream;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
// 기반스트림 : 대상에 직접 자료를 읽고 쓰는 스트림
// 보조스트림 : 직접 읽고 쓰는 것이 아닌 기반 스트림에 추가로 사용할 수 있는 기능
// 보조스트림은 실제로 데이터를 주고받는것이 아니지만 기반스트림의 기능을 향상시키거나 새로운 기능을 제공해주고
// 다른 보조스트림과 중첩하여 사용이 가능
// 바이트기반 보조스트림 : BufferedInputStream, BufferedOutputStream
// 문자기반 보조스트림 : BufferedReader, BufferedWriter
public class Ex1_bufferedInputStream {
public static void main(String[] args) {
FileInputStream in = null;
BufferedInputStream bis = null;
try {
in = new FileInputStream("C:\\WEB\\work\\Ex_0905/test.txt");
bis = new BufferedInputStream(in);
int code = 0;
while ((code = bis.read()) != -1) {
System.out.print((char) code);
}
bis.close(); // 닫을 땐 열어준 순서의 역순으로
in.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
BufferedStream과 기존의 Stream 속도 비교
img.jpg는 8K 해상도 9.2MB 용량의 이미지 파일이다.
package ex6_bufferedStream;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class BufferedTest {
public static void main(String[] args) {
FileInputStream readFile = null;
FileInputStream bisReadFile = null;
BufferedInputStream bis = null;
try {
System.out.println("기본 스트림으로 읽기 시작");
readFile = new FileInputStream("C:\\WEB\\work\\Ex_0905/img.jpg");
long start = System.currentTimeMillis();
System.out.println("이미지 읽기 시작1");
while (readFile.read() != -1) {
}
System.out.println("이미지 읽기 종료1");
long end = System.currentTimeMillis();
double time = (double)(end - start) / 1000;
System.out.println("소요시간 : " + time + "초");
System.out.println("기본 스트림 읽기 종료");
System.out.println("\n보조 스트림 읽기 시작");
bisReadFile = new FileInputStream("C:\\WEB\\work\\Ex_0905/img.jpg");
bis = new BufferedInputStream(bisReadFile);
start = System.currentTimeMillis();
System.out.println("이미지 읽기 시작2");
while (bis.read() != -1) {
}
System.out.println("이지지 읽기 종료2");
end = System.currentTimeMillis();
double result = (double) (end - start) / 1000;
System.out.println("소요시간 : " + result + "초");
System.out.println("보조 스트림 읽기 종료");
readFile.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
BufferedStream으로 이미지를 불러왔을 때 훨씬 빠른 속도로 작업을 처리한 것을 알 수 있다
BufferedStream으로 파일 복제
package ex6_bufferedStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Ex3_bufferedCopy {
public static void main(String[] args) {
FileInputStream readFile = null;
BufferedInputStream bis = null;
FileOutputStream writeFile = null;
BufferedOutputStream bos = null;
try {
readFile = new FileInputStream("C:\\WEB\\work\\Ex_0905/img.jpg");
bis = new BufferedInputStream(readFile);
writeFile = new FileOutputStream("C:\\WEB\\work\\Ex_0905/copy.jpg");
bos = new BufferedOutputStream(writeFile);
int code = 0;
while((code = bis.read()) != -1) {
bos.write(code);
}
bos.close();
writeFile.close();
bis.close();
readFile.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}