Super Coding Addict
Ch14. 자바 입출력 (2) 본문
< 표준 입출력 >
* System 클래스의 표준 입출력 멤버
public static System{
public static PrintStream out; //표준 출력 스트림
public static InputStrem in; //표준 입력 스트림
public static PrintStream err; //표준 에러 스트림
}
--> static 멤버이기 때문에 new System()하지 않고, System.out 식으로 가져다가 써옴
* System.in 사용하여 입력 받기
- 한 바이트씩 읽어 들인다
- 따라서 한글과 같이 여러 바이트로 된 문자들을 읽기 위해선, InputStreamReader와 같은 보조스트림 +
- 예제
# SystemInTest 클래스
package Ch14.stream.inputstream;
import java.io.IOException;
public class SystemInTest {
public static void main(String[] args) {
System.out.println("입력 : ");
try {
int i = System.in.read();
//System.in은 inputStream으로 1바이트 단위로 읽어들임
//표준IO는 close() 하지 않음, 계속 열려있는 것이기 때문에
//read()의 반환값은 int --> why? stream의 끝에 도달하면 더 이상 읽을 것이 없어 -1을 반환
//(1바이트를 읽지만, 4바이트로 처리)
System.out.println(i);
System.out.println((char)i);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--> System.in은 inputStream이기 때문에 1바이트씩 읽어 들인다.
--> 이 때 read() 메서드의 반환값은 int인데, stream의 끝에 도달하면 더이상 읽을 것이 없어 -1을 반환하는 것을 처리하기 위해서이다. (따라서 1바이트를 읽지만 4바이트로 처리하게 된다)
# SystemInTest2 클래스
package Ch14.stream.inputstream;
import java.io.IOException;
import java.io.InputStreamReader;
public class SystemInTest2 {
public static void main(String[] args) {
System.out.println("입력 후 '끝' 이라고 쓰세요 : ");
try {
int i;
InputStreamReader isr = new InputStreamReader(System.in);
while ( (i = isr.read()) != '끝' ) {
System.out.print((char)i);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--> System.in 스트림만 쓰면 1바이트씩만 읽어들이기 때문에, 한글로 끝이라고 쓰면 종료가 되지 않는데 한글은 2바이트이기 때문이다
--> 따라서 1바이트가 아니라 멀티바이트를 처리할 수 있게 도와주는 보조스트림인 InputStreamReader를 써주고, InputStreamReader 생성자의 인자로 inputStream(여기선 System.in)을 넣어주면 한글도 잘 읽을 수 있다
--> 읽을 땐 InputStgreamReader로 read()하면 됨 (isr.read())
* Scanner 클래스
- 생성자가 다양하기 때문에 콘솔에서뿐만 아니라 여러 소스로부터 자료를 읽을 수 있다
* Console 클래스
- System.in을 사용하지 않고 콘솔에서 표준입출력 가능
- 이클립스와는 연동되지 X
--> 이클립스와 연동되지 않으므로 이처럼 실행해보면 에러가 나게 됨
--> 실제 콘솔 화면에서 실행해야 함
'JAVA 문법' 카테고리의 다른 글
Ch14. 자바 입출력 (4) (0) | 2021.02.18 |
---|---|
Ch14. 자바 입출력 (3) (0) | 2021.02.18 |
Ch14. 자바 입출력 (1) (0) | 2021.02.16 |
Ch15. 자바 Thread 프로그래밍 (5) - multi-thread 프로그래밍 (0) | 2021.02.15 |
Ch15. 자바 Thread 프로그래밍 (4) - multi-thread 프로그래밍 (0) | 2021.02.14 |