수정필요
package ex18;
import java.io.IOException;
import java.io.InputStream;
public class Buff01 {
public static void main(String[] args) {
// app -> os : app 기준에서 read하겠다는 것(read 선)
InputStream in = System.in;
try {
int r = in.read(); // System.in 선을 통해서 1Byte 읽겠다. -> A를 입력해도 65, AA를 입력해도 65(1Byte만 읽으니까)
// char r = (char) in.read(); 내가 직접 char로 캐스팅 가능
System.out.println(r);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
package ex18;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Buff02 {
public static void main(String[] args) {
// 고정된 배열 만들어서 배열의 크기만큼 받는다.
InputStream in = System.in;
// decorate
InputStreamReader rd = new InputStreamReader(in);
// '내가 만든 고정 크기의 buffer'의 시작
// 고정 크기 - e.g. 주민번호 받을 때 유용
// ArrayList로 하더라도 크게 속도 차이(느려지지 X) 없으니까 arrayList로 처리
// collection(가변 크기)을 사용할 수 없을 때만 배열(고정 크기)로 처리
char[] buf = new char[4];
try {
rd.read(buf); // 키보드 입력 대기
System.out.println(buf[0]);
System.out.println(buf[1]);
System.out.println(buf[2]);
System.out.println(buf[3]);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
package ex18;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Buff03 {
public static void main(String[] args) {
// 결론 - Buff01, Buff02 사용할 일X
// Decorator 패턴
/*
InputStream in = System.in;
// 객체 재사용 -> 의존 (Composition) : 생성자에 주입
// 기능의 확장
InputStreamReader rd = new InputStreamReader(in);
// 가변이라는 기능 확장
BufferedReader br = new BufferedReader(rd);
*/
// Scanner와 BufferedReader는 동일한 기능을 한다.
// Scanner sc = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // System.in : 키보드에만 접근 가능
try {
String line = br.readLine();
System.out.println(line);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
package ex18;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
// 버퍼는 꽉 차야 전송된다.
// (버퍼의)프로토콜 : \n(엔터) (문자를 전달하고 싶으면 종단 기호를 넣어야 함. 없으면 끝이 안났다고 생각해서 읽지 않는다.)
public class Buff04 {
public static void main(String[] args) {
// 버퍼 - 8192 Byte
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 모니터에 연결
try {
bw.write("안녕\n"); // 한글 2자 - 4Byte
bw.flush(); // 버퍼가 꽉 차지 않더라도 전송하는 방법 - 물을 흘려줘야 된다.
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
package ex18;
import java.io.PrintWriter;
import java.util.Scanner;
public class Buff05 {
public static void main(String[] args) {
PrintWriter out = new PrintWriter(System.out, true);
out.println("Hello World"); // println에 의해 \n이 붙고 autoFlush에 의해 버퍼가 꽉 차지 않아도 자동으로 Flush된다.
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
System.out.println(s);
}
}
Share article