개인참고자료/자바(네트워크)

바이트 기반 스트림 - System.in을 이용해서 키보드로부터 입력받기

경진 2008. 7. 13. 16:45
System.in을 이용해서 키보드로부터 입력받기

System.in은 InputStrream 형식이라고 했다. 이는 InputStream에 있는 모든 메소드를 사용할 수 있다.

import java.io.*;

public class SystemInputTest {

    public static void main(String[] args) {
        int i = 0;

        try {
            while((i = System.in.read()) != -1){
                System.out.write(i);
            } // while문 종료
        } catch (IOException e) {
            System.out.println(e);
        }
    } // main 메소드 종료
}

            while((i = System.in.read()) != -1){
                ……
            } // while문 종료

System.in 은 표준 입력을 받는다. 표준 입력이란 보통 키보드로부터의 입력을 말한다. 그런데 여기서 주의해야 할 점이 있다. 키보드에 문자를 누른다고 해서 곧장 read() 메소드를 통해서 읽어 들이는 것이 아니다.

왜냐하면 키보드를 눌렀을 경우, 눌려진 값은 운영체제가 관리하는 키보드 버퍼에 쌓이고 JVM에게는 값이 전달되지 않기 때문이다. JVM에게 값을 전달하려면 키보드의 엔터 키를 입력해야 한다. 엔터 키를 입력하게 되면 키보드 버퍼에 있던 값과 엔터 키 값이 한꺼번에 JVM에게 전달된다.

이렇게 전달되는 문자열은 read() 메소드를 통해서 차례대로 한 바이트씩 읽어 들일 수 있다. 그리고 한 바이트씩 계속해서 읽어 들이며 while문 안의 내용을 실행하게 된다. 키보드로부터 입력 받을 때 파일의 끝을 나타내려면 Ctrl키와 Z키를 동시에 누른 후 엔터키를 입력하면된다.

                System.out.write(i);

System.out은 PrintStream 형식이다. PrintStream 역시 OutputStream을 상속받고 있기 때문에 OutputStream에 있는 write() 메소드를 사용할 수 있다. 즉, read() 메소드로부터 읽어 들인 정수 하위 8비트 그대로를 표준 출력 장치(모니터)에 출력하게된다.

결과화면