표준입출력과 File

표준입출력 - System.in, System.out, System.err

표준입출력은 콘솔을 통한 데이터 입력과, 콘솔로의 데이터 출력을 의미한다.

자바에서는 표준 입출력을 위해 3가지 입출력 스트림을 제공한다.

  1. System.in : 콘솔로부터 데이터 입력받음
  2. System.out : 콘솔로 데이터 출력함.
  3. System.err : 콘솔로 데이터(특히 급한 오류) 출력함.

이들은 자바 어플리케이션 실행과 동시에 사용할 수 있게 자동으로 생성되기 때문에, 별도로 스트림을 생성하는 코드를 작성하지 않아도 된다.

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();
		}
	}
}

Untitled

여기서 문자 13은 \r, 문자 10은 \n이다.

콘솔입력은 버퍼를 갖고 있기 때문에 backspace키를 이용해 편집이 가능하며, 보통 255자까지 입력할 수 있다.

콘솔에서는 enter를 입력하거나, 입력의 끝을 알리는 ctrl+z를 누르지 않으면 계속 데이터가 입력중인 것으로 간주한다. 따라서 커서가 입력을 계속 기다리는 블락킹상태를 유지한다.

콘솔에서 Enter를 누르는 것은, 두개의 특수문자 \\r\\n 이 입력된 것으로 간주한다. \\r 은 캐리지 리턴(carriage return)즉, 커서를 현재 라인의 첫번째 칼럼으로 이동시키는 특수문자이고, \\n 은 커서를 다음줄로 이동시키는 줄바꿈을 한다.