가장 기본이 되는 입력 스트림!
여기서 '스트림'은 입력장치로부터 프로그램으로 데이터가 흐르는 관이라고 이해하면 쉽다. (입력장치 =스트림=> 프로그램)
System이라는 클래스의 in 변수(System.in
)는 InputStream의 정적 필드로, 표준 입력 스트림이다.
InputStream inputstream = System.in;
int a = inputstream.read();
System.out.println(a);
그런데 여기서 입력과 출력이 다르게 나온다 ❗
그 이유는 InputStream이 바이트 단위로 데이터를 보내고,
입력메소드인 read()
가 1 byte 값만 읽어들이기 때문이다.
또한, 입력 데이터가 운영체제 인코딩 형식의 10진수로 저장되기 때문이다.
Java를 배울 때 가장 먼저 배우는 입력 방법이다.
아래 코드 new Scanner(System.in)
을 보면,
InputStream을 통해 표준 입력을 받음을 알 수 있다.
또한, Scanner 클래스 내부에 있는 InputStreamReader가
바이트 데이터를 문자 단위로 변환하는 중개자 역할을 하여 온전한 문자 형태로 입력된다.
입력받은 문자는 입력메소드인 next()
등을 통해
강력한 정규식 검사를 거치고 타입에 맞게 저장된다.
문자열의 경우 Scanner 내부에 임시 배열을 두어 문자열처럼 사용한다.
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
double d = sc.nextDouble();
boolean b = sc.nextBoolean();
String s = sc.next();
Scanner처럼 InputStreamReader로 문자를 처리하나,
배열을 만들지 않고 Buffer에 문자를 쌓아둔다.
입력메소드인 readLine()
을 통해 한 번에 문자열로 저장한다.
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sentence = br.readLine();
}
참고: https://st-lab.tistory.com/41
java.lang.System
클래스 내에는 static 객체인 out
이 있고,
out 객체는 PrintStream의 객체이므로,
PrintStream이 갖고있는 println
메소드를 사용한다.
많은 양을 출력할 시 Buffer를 사용하는 것이 빠르다.
Buffer를 사용한 후에는 flush()
로 스트림을 비우고,
close()
로 스트림을 닫아야 한다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("출력");
bw.newLine();
bw.flush();
bw.close();