메모리 버퍼로 실행 성능을 높이는 보조 스트림
- 프로그램이 중간에 메모리 버퍼buffer와 작업해서 실행 성능 향상 가능
- 출력 스트림의 경우 직접 하드 디스크에 데이터를 보내지 않고 메모리 버퍼에 데이터를 보냄으로써 출력 속도를 향상. 입력 스트림에서도 버퍼를 사용하면 읽기 성능 향상
출처, 이것이 자바다
출처, 이것이 자바다
- 바이트 스트림에는 BufferedInputStream, BufferedOutputStream이 있고 문자 스트림에는 BufferedReader, BufferedWriter가 있음
출처, 이것이 자바다
package ch18.sec07.exam01;
/*
바이트 스트림 사용
버퍼기능을 제공하는 보조스트림을 이용하여, 이미지 파일 복사 작업하는 예제.
*/
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class BufferExample {
public static void main(String[] args) throws Exception {
//입출력 스트림 생성(버퍼 스트림 미사용)
String originalFilePath1 = BufferExample.class.getResource("originalFile1.jpg").getPath();
String targetFilePath1 = "C:/dev/temp/targetFile1.jpg";
FileInputStream fis = new FileInputStream(originalFilePath1); //입력스트림
FileOutputStream fos = new FileOutputStream(targetFilePath1); //출력스트림. 파일생성
//입출력 스트림 + 버퍼 스트림 생성
//1)입출력 스트림
String originalFilePath2 = BufferExample.class.getResource("originalFile2.jpg").getPath();
String targetFilePath2 = "C:/dev/temp/targetFile2.jpg";
FileInputStream fis2 = new FileInputStream(originalFilePath2);
FileOutputStream fos2 = new FileOutputStream(targetFilePath2);
//2)보조 스트림
BufferedInputStream bis = new BufferedInputStream(fis2);
BufferedOutputStream bos = new BufferedOutputStream(fos2);
//버퍼 미사용 복사
long nonBufferTime = copy(fis, fos);
System.out.println("버퍼 미사용:\t" + nonBufferTime + " ns");
//버퍼 사용 복사
long BufferTime = copy(bis, bos);
System.out.println("버퍼 사용:\t" + BufferTime + " ns");
fis.close();
fos.close();
//사용시 예외발생
// fis2.close();
// fos2.close();
bis.close();
bos.close();
}
public static long copy(InputStream is, OutputStream os) throws Exception {
//시작 시간 저장
long start = System.nanoTime();
//1바이트를 읽고, 스트림 버퍼에 1바이트를 출력
while(true) {
int data = is.read();
if(data == -1) break;
os.write(data);
}
os.flush();
//끝 시간 저장
long end = System.nanoTime();
//복사 작업한 시간 리턴
return (end-start);
}
}
package ch18.sec07.exam02;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
/*
문자스트림
문자스트림에 버퍼기능의 보조스트림을 사용하여, 파일의 내용을 읽어오는 예제.
*/
public class ReadLineExample {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("src/ch18/sec07/exam02/ReadLineExample.java"));
int lineNo = 1;
while(true) {
String str = br.readLine();
if(str == null) break;
System.out.println(lineNo + "\t" + str);
lineNo++;
}
br.close();
}
}