<aside> 💡

버퍼는 CPU와 I/O 장치 사이에서

속도·타이밍·단위 차이를 흡수하는

커널과 라이브러리의 완충지대이다.

</aside>

버퍼가 있으면

👉 비동기 + 효율 + 안정성

1. 버퍼 코드

package com.mtcoding.ex01;

import java.io.IOException;
import java.io.InputStream;

public class Buf01 {
    public static void main(String[] args) {
        // 1. 키보드와 컴퓨터가 Byte 스트림이 연결됨
        InputStream in = System.in;

        // 2. 바이트 읽기
        try {
            int n = in.read(); // 키보드로 부터 입력대기 \\n (엔터)
            System.out.println(n);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

package com.mtcoding.ex01;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Buf02 {
    public static void main(String[] args) {
        // 1. 바이트 스트림 연결
        InputStream in = System.in;

        // 불편한점 : 글자 하나씩(버퍼), 숫자를 문자로 캐스팅(char)을 안해준다.
        // 2. 배열을 가질 수 있고, 문자로 캐스팅 해줌.
        InputStreamReader ir = new InputStreamReader(in);
        char[] buf = new char[3];

        try {
            ir.read(buf); // 키보드 입력 대기 (\\n)

            for (char c : buf){
                System.out.print(c+",");
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}
package com.mtcoding.ex01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Buf03 {
    public static void main(String[] args) {
        // 기능 확장 -> 데코레이터(장식) 패턴

        // 1. 바이트 스트림 연결
        InputStream in = System.in;

        // 2. 숫자를 문자로 변환해주는 것을 설정
        InputStreamReader ir = new InputStreamReader(in);

        // 3. 직접 배열을 다는게 아니라, 가변 배열을 달아줌
        BufferedReader br = new BufferedReader(ir);

        try {
            String line = br.readLine(); // 엔터키까지 읽는 함수 (버퍼에 있는 것을)
            System.out.println(line);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

package com.mtcoding.ex01;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

public class Buf04 {
    public static void main(String[] args) {
        // 1. 바이트 스트림 연결
        OutputStream out = System.out; // 모니터 연결
        OutputStreamWriter ow = new OutputStreamWriter(out);
        BufferedWriter bw = new BufferedWriter(ow);
        try {
            bw.write("ABC"); //
            bw.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

2. 개념 정리

image.png

image.png

3. 버퍼링

2. 버퍼링

image.png