프로그래밍 정리/자바

BufferedInputStream와 BufferedOutputStream

주누다 2013. 6. 1. 02:57
반응형

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