Chapter 15. 입출력 I/O

kdkdhoho·2022년 12월 12일
0

자바의 정석

목록 보기
4/4

자바에서 입출력하기 위해선 Stream 클래스를 사용하자. (14장의 스트림과 다름)
스트림이란, 데이터를 운반하는 데 사용되는 연결통로이다.

스트림은 단방향 통신만 가능하다. 따라서 입출력 모두 각각의 스트림이 존재한다.

바이트 기반 스트림 - InputStream, OutputStream

바이트 단위로 데이터를 전송한다.

대표적인 예로 FileInputStream/OutputStream가 있다.

InputStream은 read(), read(byte[] b), read(byte[] b, int off, int len)만 잘 사용해도 된다. 여기서 주의할 점은, read()은 추상 메서드이다. 따라서 본 메서드를 목적에 맞게끔 구현해야 한다.

보조 스트림

스트림을 보조하기 위한 스트림이다.

대표적인 예로, BufferedInputStream이 있다.

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        FileInputStream fileInputStream = new FileInputStream("text.txt");
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        bufferedInputStream.read();
    }
}

버퍼를 사용한 입출력과 사용하지 않은 것은 상당한 성능 차이를 보인다.
가능한 버퍼를 사용한 입출력을 수행하자.

문자기반 스트림 - Reader, Writer

java에서의 문자형인 char형은 2byte이다.
따라서 1byte 단위의 바이트 기반 스트림을 사용해 문자열을 처리하는 데는 어려움이 있다.
이를 극복하기 위해 문자기반 스트림이 존재한다.

InputStream => Reader, OutputStream => Writer로 각각 대응한다.
예로, FileInputStream => FileReader가 된다.

사용법은 바이트기반 스트림과 동일하다.

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader("test.txt");
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        for (;;) {
            int read = bufferedReader.read();

            if (read == -1) {
                break;
            }

            System.out.print((char) read);
        }

        bufferedReader.close();
        fileReader.close();
    }
}

보조 스트림 마찬가지로 바이트기반 스트림의 보조 스트림과 별 차이 없다.

profile
newBlog == https://kdkdhoho.github.io

0개의 댓글