System.in.read()
- Scanner, BufferReader 말고 입력값을 받는다.
- 아스키코드로 값을 받는다.
- 버퍼를 사용하기 때문에 throws IOException 예외처리를 해 준다.
- 숫자로 값을 받으려면 0의 아스키코드 값인 48을 빼준다. ex) -'0' , -48
- 문자로 값을 받으려면 (char) 형변환을 해 준다.
- 문자열 출력도 가능 -- 문자 하나당 byte로 받는데 byte 배열로 받은 후 new String(byte[])하여 출력
디버깅 모드로 1을 입력하고 엔터를 치게 되면 차례로 1의 아스키코드 값인 49와 엔터(LF; line feed) 값인 10이 들어가게 되어 원래 의도대로 실행되지 않는다. 엔터까지 인식하게 되어서! 그래서 이 점을 주의하고 사용하여야 한다. 안전하게 각각을 주석 처리하거나 scanner를 사용할 때처럼 엔터를 버리도록 한번 더 입력한다.
import java.io.IOException;
public class ex_systemInRead {
public static void main(String[] args) throws IOException {
int ex1 = System.in.read(); // 1
System.out.println(ex1); // 49
System.in.read();
int ex2 = System.in.read(); // 1
System.out.println(ex2-'0'); // 1
System.in.read();
char ex3 = (char) System.in.read(); // c
System.out.println(ex3); // c
System.in.read();
byte[] chs = new byte[6];
System.in.read(chs); // hello\n
String s = new String(chs); // hello\n
System.out.println(s);
}
}
문자열을 출력할 때 배열 크기보다 더 적게 문자열을 입력하게 되면 공백이 아닌 null 값이 포함되어 출력된다.
cf. OS별 줄바꿈 문자 '\n' 인식
windowOS: CRLF('\r\n')
Unix 계열 OS: LF('\n')만 사용하여 인식
* 아스키코드
https://jw910911.tistory.com/90
https://devyoseph.tistory.com/141
'JAVA' 카테고리의 다른 글
[JAVA] 직렬화, 역직렬화 개념 (1) | 2024.10.02 |
---|---|
[JAVA] 큐(Queue), 덱(Deque) 구현체, 메서드 정리 (0) | 2024.09.30 |
[JAVA] 자바와 C언어 메모리 구조 비교 (0) | 2024.08.19 |
[JAVA] comparable, comparator 비교 (0) | 2024.07.03 |
[JAVA] delete(), deleteCharAt() (0) | 2024.05.07 |