본문 바로가기
개발 수업/JAVA

[Java] 보조스트림

by 오늘 하루s 2023. 5. 26.
728x90
더보기

Day21-4. 230526

보조 스트림

- 다른 스트림과 연결이 되어 여러 가지 편리한 기능을 제공해주는 스트림,

- 보조 스트림은 자체적으로 입출력을 수행할 수 없기 때문에 입출력 소스와 바로 연결되는

InputStream,OutputStream, Reader, Witer 등에 연결해서 입출력을 수행.

- 프로그램은 입력 스트림으로부터 직접 데이터를 읽지 않고, 보조 스트림에서 제공하는 기능을 이용해서 데이터를 읽음.

반대로 출력 스트림으로 직접 데이터를 보내지 않고 보조 스트림에서 제공하는 기능을 이용해 데이터를 보냄.

 

보조 스트림 연결하기

보조스트림 변수 = new 보조스트림(연결스트림)

ex1) InputStream을 문자 변환 보조 스트림인 InputStreamReader에 연결하는 코드는 다음과 같다.

InputStream is = ...;
InputStreamReader reader = new InputStreamReader(is);

 

- 보조 스트림은 연속적으로 연결할 수 있다.

ex2) InputStreamReader를 다시 성능 향상 보조 스트림은 BufferedReader에 연결 할 수 있음.

InputStream is = System.in;
InputStreamReader reader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(reader);

 

문자 변환 보조 스트림

- 소스 스트림이 바이트 기반 스트림(InputStream, OutputStream, FileInputStream,FileOutputStream)이면서

입출력 데이터가 문자라면 Reader와 Writer로 변환해서 사용하는 것 고려

-> 바이트 기반 스트림보다 편리. 문자셋의 종류를 지정할 수 있기 때문에 다양한 문자 입출력 가능

 

OutputStreamWriter

바이트 기반 출력 스트림에 연결되어 문자 출력 스트림인 Writer로 변환한는 보조 스트림.

Writer writer = new OutpurStreamWriter(바이트 기반 출력 스트림);

 

InputStreamWriter

바이트 기반 입력 스트림에 연결되어 문자 입력 스트림인 Reader로 변환한는 보조 스트림.

Reader reader = new InpurStreamWriter(바이트 기반 입력 스트림);

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package chap14;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
 
public class CharacterConverStream {
 
    public static void main(String[] args) throws FileNotFoundException {
        write("문자 convert Stream"); //output 내보내기
        
        String data = read();
        System.out.println(data);
    }
    
    public static void write(String str) {
        FileOutputStream fos = null;
        try {
            //메인스트림 생성
            fos = new FileOutputStream("C:\\javaStudy\\test1.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //문자기반 - 보조스트림생성
        Writer writer = new OutputStreamWriter(fos);
        try {
            writer.write(str);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public static String read() throws FileNotFoundException {
        //메인스트림 생성
        InputStream fis = new FileInputStream("C:\\javaStudy\\test1.txt");
        //문자기반 - 보조스트림생성
        Reader reader = new InputStreamReader(fis);
        char[] buffer = new char[100];
        String data = ""//파일에서 읽은 char[]를 String으로 생성하여 저장하기 위한 변수 선언
        try {
            int readCharNum = reader.read(buffer);
            reader.close();
            data = new String(buffer , 0 , readCharNum);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }
}
cs
더보기

* 실행 결과

문자 convert Stream

 

728x90