<aside> 💡
버퍼는 CPU와 I/O 장치 사이에서
속도·타이밍·단위 차이를 흡수하는
커널과 라이브러리의 완충지대이다.
</aside>
👉 비동기 + 효율 + 안정성
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);
}
}
}


