자바

자바 표준입출력

알로겐 2021. 2. 7. 17:28

\자바 표준 입출력엔 3가지가 있다.

  • System.in
  • System.out
  • Sysytem.err

System.in은 InputStream 형태이다. 그래서 보통 InputStream을 상속한 클래스로 객체를 생성한다. 표준 입력 장치 객체를 가리킨다.

System.out은 표준 출력 장치, System.err는 표준 에러 출력 장치이다. System.err로 에러를 출력하면 빨간 글자로 표시된다.

 

자바에선 데이터를 입력하는 방식이 InputStream, Reader 크게 두가지로 나누어진다.

InputStream은 1byte씩 입력받고, Reader는 char(2 byte)씩 입력받는다.

System.in은 InputSteam 계열로 1byte씩 읽어드리는데, 한글은 2바이트이므로 이 방식으로 읽을 수 없다.

만약 한글을 읽어드리고 싶으면 InputStream을 Reader 계열로 바꿔서 입력받거나, Scanner를 사용해서 읽어야 한다.

 

BufferedReader in = new BufferedReader(new InputStreamReader(System.in))
String line = in.readLine();

 

System Class

java.lang.Object

 ㄴ java.lang.System

  • System 클래스는 인스턴스화 할 수 없다.
  • System 클래스에 의해 얻을 수 있는 기능으로는 표준 입력, 표준 출력, 표준 출력 스트림, 외부적으로 정의된 프로퍼티 및 환경 변수에의 엑세스, 파일 및 라이브러리 로딩 방법, 배열의 일부 카피

System 클래스에서 많이 쓰는 함수 세가지

  • arraycopy(src, srcPos, dest, destPos, length)
  • currentTimeMillis()
  • setIn(InputStream in) : 표준 출력 스트림 다시 할당
// src, dest 주솟값에 접근해서 값을 바꿈. return 없음
System.arraycopy(src, 0, dest, 0, src.length);

long stime = System.currentTimeMillis();

//BufferedReader로 파일 읽어서 입력 받을때
System.setIn(new FileInputStream("res/example.txt"));
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

도대체 System.in이 뭔가 고민했었다. Scanner sc = new Scanner(System.in)에서도 계속 쓰고

찾아보니까 in이 InputStream 객체 이름이었다.

InputStream 클래스 객체가 static 이어서 System.in 이렇게 쓰는 거였다.