BufferedInputStream(버퍼 바이트 입력스트림)
- BufferedInputStream 클래스는 입력에 대한 버퍼링(buffering)을 하고 mark 메소드와 reset 메소드를
지원하기 위한 기능을 제공
- BufferedInputStream 객체가 생성될 때, 버퍼링을 위한 내부 배열 객체가 같이 생성됨.
- BufferedInputStream은 입력 스트림으로부터 미리 버퍼에 데이터를 갖다놓게 되므로 데이터를
읽기 위한 동작이 보다 효율적.
만약 버퍼링을 하지 않는다면, read 또는 readLine 메소드를 호출할 때마다 파일로부터 바이트를 읽고,
이 바이트를 문자로 변환하고, 이 문자를 리턴해 주는 작업을 함으로써 매울 비효율적인 입력 작업을
하게 됨.
- 바이트 입력 스트림의 현재 위치를 mark하고 나중에 다시 그 mark된 위치로 되돌아가 그 위치부터
다시 읽을수 있도록 reset하는 기능을 제공. 물론, 가장 최근에 mark된 위치로 reset ehla.
- BufferedInputStream(InputStream in)
: 주어진 바이트 입력 스트림에 대한 BufferedInputStrea 객체를 생성하고 내부 버퍼의 크기인
512바이트로 설정
-BufferedInputStream(InputStream in, int size)
: 주어진 바이트 입력 스트림에 대한 BufferedInputStream 객체를 생성하고, 내부 버퍼의 크기를
주어진 크기로 설정
BufferedOutputStream(버퍼 바이트 출력 스트림)
- BufferedOutputStream 클래스는 출력시에 버퍼링을 지원.
- BufferedInputStream 클래스와 마찬가지로 실제 데이터 대상과 연결된 OutputStream 객체와
버퍼를 내부적으로 가지고 있음.
- 데이터를 출력할 때, 먼저 내부 버퍼에 출력이 되고, 버퍼가 꽉 차거나 flush메소드 또는 close메소드가
호출될 때 내부 버퍼의 내용이 실제 OutputStream에 출력되게 됨.
- OutputStream 클래스가 제공해주는 객체생성자는 다음과 같고, OutputStream 클래스에서 제공해주는
메소드들을 재정의하여 제공해주고 있음.
- BufferedOutputStream(OutputStream out)
: 주어진 바이트 출력 스트림에 대한 BufferedOutputStream 객체를 생성하고, 내부 버퍼의 크기인
512바이트로 설정
-BufferedOutputStream(OutputStream out, int size)
: 주어진 바이트 출력 스트림에 대한 BufferedOutputStream 객체를 생성하고, 내부 버퍼의 크기를
주어진 크기로 설정
====================================================================================================
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class BufferedStreamTest {
final static int BUFFER_SIZE = 4096;
public static void main(String[] args) throws Exception{
int i, len = 0;
byte[] buffer = new byte[BUFFER_SIZE];
BufferedInputStream in = null;
BufferedOutputStream out = null;
if(args.length < 2){
System.out.println("USAGE : BufferedInputOutputTest Source_file Destination_file");
System.exit(-1);
}
System.out.println("args[0] : " + args[0]);
System.out.println("args[1] : " + args[1]);
FileInputStream fin = new FileInputStream(args[0]); // FileInputStream 생성
FileOutputStream fout = new FileOutputStream(args[1]);
in = new BufferedInputStream(fin); // FileInputStream을 BufferedInputStream에 담음.
// DataInputStream을 BufferedInputStream에 담는 방법은....?
// DataInputStream(in)처럼...?
out = new BufferedOutputStream(fout, BUFFER_SIZE);
while( (i = in.read(buffer)) != -1){
out.write(buffer);
len += i;
System.out.println("process:read["+i+","+len+"], avail["+in.available()+"]");
}
in.close();
out.close();
}
}
'프로그래밍 정리 > 자바' 카테고리의 다른 글
flush() (0) | 2013.06.01 |
---|---|
SequenceInputStream (0) | 2013.06.01 |
DataInputStream과 DataOutputStream (0) | 2013.06.01 |
StreamTokenizer (0) | 2013.06.01 |
RandomAccessFile (0) | 2013.05.31 |