본문 바로가기
언어/JAVA

여러가지 보조 스트림 클래스

by step 1 2021. 5. 23.
반응형

보조 스트림

  • 실제 읽고 쓰는 스트림이 아닌 보조 기능을 제공하는 스트림
  • FilterInputStream과 FileOutputStream이 보조 스트림의 상위 클래스들
  • 생성자의 매개변수로 또 다른 스트림(기반 스트림이나 다른 보조 스트림)을 가짐
  • Decorator Pattern으로 구현 됨

상위 클래스 생성자

생성자 설명
protected FilterInputStream과 (InputStream in) 생성자의 매개변수로 InputStream을 받는다.
public FilterOutputStream(OutputStream out) 생성자의 매개변수로 OutputStream을 받는다.

 

InputStreamReader와 OutputStreamWriter

바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림

 

FileInputStream으로 읽은 자료를 문자로 변환해주는 예

InputStreamReaderTest.java

package ch63;

import java.io.FileInputStream;
import java.io.InputStreamReader;

public class InputStreamReaderTest {

	public static void main(String[] args) {
		
		try (InputStreamReader irs = new InputStreamReader(new FileInputStream("reader.txt"))){
			
			int i;
			while ((i = irs.read()) != -1) { // 보조 스트림으로 문자를 읽어온다
				System.out.print((char)i);
				
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}

 

 

BufferedInputStream과 BufferedOutputStream

  • 약 8k의 배열이 제공되어 입출력이 빠르게 하는 기능이 제공되는 보조 스트림
  • BufferedReader와 BufferedWriter는 문자용 입출력 보조 스트림

BufferedInputStream과 BufferedOutputStream을 이용하여 파일 복사하는 예

FileCopyTest.java

package ch63;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class FileCopyTest {

	public static void main(String[] args) throws IOException {
		
		long milisecond = 0;
		
		// Buffered를 사용하면 좀 더 빨리 동작한다
		try (BufferedInputStream bis = new BufferedInputStream( new FileInputStream("a.zip"));
				BufferedOutputStream bos = new BufferedOutputStream (new FileOutputStream("copy.zip"))){
			
			milisecond = System.currentTimeMillis();  // 현재 시간 
			
			int i;
			while ((i = bis.read()) != -1) {
				bos.write(i);
			}
			milisecond = System.currentTimeMillis() - milisecond;  // 걸린 시간
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		System.out.println(milisecond + " 소요되었습니다.");
		
		// 보조스트림 에 (동작은 안한다)
//		Socket socket = new Socket();
//		
//		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//		
//		br.readLine(); // 한 쭐 읽기
	}
}

복사된 파일 확인

 

반응형

'언어 > JAVA' 카테고리의 다른 글

입출력 클래스(File, RandomAccessFile)  (0) 2021.05.23
DataStream, 직렬화  (0) 2021.05.23
문자단위 입출력 스트림  (0) 2021.05.23
OutputSteam (출력 스트림)  (0) 2021.05.23
바이트 단위 입출력 스트림  (0) 2021.05.23