본문 바로가기

Java

Java IO (보조 Stream)

보조 Stream

  • 스트림의 기능 향상
  • 새로운 기능 추가
  • 실제로 데이터를 주고받지는 않음
    • 보조스트림만으로 입출력 처리 불가
    • 따라서, 스트림 생성 -> 보조 스트림 생성
      • ex) text.txt 파일 읽기 위해 FileInputStream -> BufferedInputStream 생성

ex)

FileInputStream fis = new FileInputStream("test.txt");
  • 먼저 기반스트림 생성
BufferedInputStream bis = new BufferedInputStream(fis);
  • 보조스트림 생성
    • 기반스트림을 이용해서 생성
bis.read();
  • 보조스트림인 BufferedInputStream으로부터 데이터 읽음.

 

  • FileInputStream
    • 실제 입력기능 수행
  • BufferedInputStream
    • 기반스트림에 버퍼만 제공

 

보조 Stream 종류

입력 출력 설명
FileterInputStream FilterOutputStream 필터를 이용한 입출력 처리
BufferedInputStream BufferedOutputStream 버퍼를 이용한 입출력 성능향상
DataInputStream DataOutputStream int, float와 같은 기본형 단위(primitive type)로 데이터를 처리하는 기능
ObjectInputStream ObjectOutputStream 데이터를 객체단위로 읽고 쓰는데 사용.
주로 파일을 이용하며 객체 직렬화와 관련.

 

보조 Stream 특징

  • 보조스트림의 close()호출만 하면 기반스트림의 close() 또는 flash() 자동으로 호출됨.
    • ex) FilterOutputStream의 자손 :  BufferedOutputStream
      • BufferedOutputStream의 close()호출하면 FilterOutputStream 자동으로 close().

바이트기반의 보조스트림

1. FilterInputStream과 FilterOutputStream

  • 모든 보조스트림의 조상.

 

FilterInputStream의 자손.

FilterOutputStream의 자손.


2. BufferedInputStream과 BufferedOutputStream

  • 버퍼를 사용하는 보조스트림
    • 버퍼 : 바이트 배열
    • 스트림의 입출력 효율 향상
      • 한 바이트씩 입출력 < 바이트 배열로 입출력

 

예제

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedOutputStreamEx1 {
	public static void main(String[] args) {
		try {
			FileOutputStream fos = new FileOutputStream("123.txt");
			BufferedOutputStream bos = new BufferedOutputStream(fos, 5);		//BufferedOutputStream의 버퍼 크기 : 5
			for(int i = '1'; i <= '9'; i++) {			//파일 123.txt에 1부터 9까지 출력.
				bos.write(i);
//				bos.flush();       //flush() 없으면 결과값 : 12345.		//flush() 있으면 결과값 : 123456789.
			}
			fos.close();
		}catch(IOException e) {
			System.out.println(e);
		}
	}
}

 

 


문자기반의 보조스트림

1. BufferedReader과 BufferedWriter

  • 버퍼를 이용해서 입출력 효율을 높일 수 있는 역할

2. InputStreamReader과 OutputStreamWriter

  • 바이트 기반 스트림을 문자기반 스트림으로 연결시켜주는 역할
  • 바이트기반 스트림의 데이터를 지정된 인코딩의 문자데이터로 변환하는 작업 수행

'Java' 카테고리의 다른 글

클래스 종류  (0) 2020.10.05
Eclipse 단축키  (0) 2020.09.11
RandomAccessFile  (0) 2020.09.11
Java IO (기반 Stream)  (0) 2020.09.10