표준입출력은 콘솔을 통한 데이터 입력과, 콘솔로의 데이터 출력을 의미한다.
자바에서는 표준 입출력을 위해 3가지 입출력 스트림을 제공한다.
이들은 자바 어플리케이션 실행과 동시에 사용할 수 있게 자동으로 생성되기 때문에, 별도로 스트림을 생성하는 코드를 작성하지 않아도 된다.
System클래스의 소스를 보면, in, out, err는 스태틱 변수로 선언되어 있는 것을 볼 수 있다. 이들은 System클래스 내에서 InputStream, PrintStream객체 타입으로 선언되어있지만.. 실제로 사용하는 객체는 BufferedInputStream과 BufferedOutputStream이다.
실습해보자.
import java.io.*;
public class StadnardIO {
public static void main(String[] args) {
try {
int input = 0;
while((input = System.in.read())!= -1)
{
System.out.println("input :"+input+", (char)input :"+(char)input);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
여기서 문자 13은 \r, 문자 10은 \n이다.
콘솔입력은 버퍼를 갖고 있기 때문에 backspace키를 이용해 편집이 가능하며, 보통 255자까지 입력할 수 있다.
콘솔에서는 enter를 입력하거나, 입력의 끝을 알리는 ctrl+z를 누르지 않으면 계속 데이터가 입력중인 것으로 간주한다. 따라서 커서가 입력을 계속 기다리는 블락킹상태를 유지한다.
콘솔에서 Enter를 누르는 것은, 두개의 특수문자 \\r
과 \\n
이 입력된 것으로 간주한다. \\r
은 캐리지 리턴(carriage return)즉, 커서를 현재 라인의 첫번째 칼럼으로 이동시키는 특수문자이고, \\n
은 커서를 다음줄로 이동시키는 줄바꿈을 한다.