✍ Scanner 🚶♂️
- java.util.Scanner 클래스
- 기본 유형과 문자열을 구문 분석 할 수 있는 간단한 텍스트 스캐너
- 내부적으로 정규식을 사용하여 다른 유형을 읽기 기능
- Java 프로그램에서 입력을 읽는 가장 쉬운 방법
- 특정 데이터 유형을 읽기 위해 사용할 함수 [nextInt(), nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), next()]
- 문자열을 읽으려면 nextLine() 사용
- 단일 문자를 읽으려면 next(), charAt(0)을 사용
- next() 함수는 입력의 다음 토큰 / 단어를 문자열로 반환하고, charAt(0) 함수는 해당 문자열의 첫 번째 문자를 반환
✍ BufferedReader🏃
- Java.io.BufferedReader 클래스
- Buffer를 이용해 입출력의 효율을 높혀줌
- 문자 입력 스트림으로, 텍스트를 읽고 문자를 버퍼링하여, 문자 시퀀스를 효율적으로 읽을 수 있도록 함 (line 단위의 입출력이 편리함)
- 버퍼 크기를 지정하거나 기본 크기를 사용할 수 있으며, 기본값은 대부분의 목적에 충분히 큼
- 일반적으로 Reader의 각 읽기 요청은 해당 읽기 요청이 기본 문자 또는 바이트 스트림으로 이루어 지도록 함
- 따라서 FileReaders 밑 InputStreamReasders와 같이 read()작업에 비용이 많이들 수 있는 판독기 주위에 BufferedReader를 래핑하는 것이 좋음
생성자
- BufferedReader(Reader in): 기본 크기의 입력 버퍼를 사용하는 버퍼링 문자 입력 스트림을 만듦
- BufferedReader(Reader in, int sz): 지정된 크기의 입력 버퍼를 사용하는 버퍼링 문자 입력 스트림을 만듦
문자 입력 스트림
- 입출력 단위가 2byte(JAVA에서는 문자를 의미하는 char형은 2byte) (cf. 바이트 기반 스트림: 입출력 단위가 1byte)
- 문자기반 스트림은 여러 종류의 인코딩과 자바에서 사용하는 유니코드간의 변환을 자동적으로 처리해주기 떄문에 Reader는 특정 인코딩을 읽어서 유니코드로 변환하고, Writer는 유니코드를 특정 인코딩으로 변환하여 자동 저장(한글 깨짐 방지)
둘의 가장 큰 차이점은 속도!
⏩ 버퍼를 사용하지 않는 입력
<키보드> ====> <프로그램>
: 키보드의 입력이 키를 누르는 즉시 바로 전달됨
⏭ 버퍼를 사용하는 입력
<키보드> == [버퍼(Buffer)] ==> <프로그램>
: 1. 키보드의 입력이 있을 때 마다 한 문자씩 버퍼로 전송함
2. 버퍼가 가득 차거나, 개행문자가 나타나면, 버퍼의 내용을 한 번에 전송함