Scanner가 FileInputStream을 통해 데이터를 읽는 구조
코드
FileInputStream fis = new FileInputStream("res/kors.txt");
Scanner scan = new Scanner(fis);
- fis: 파일에서 1바이트씩 읽어올 수 있는 입력 스트림
- scan: 입력 스트림을 이용해 문자열 단위 또는 숫자 단위로 읽을 수 있는 고수준 클래스
흐름 설명
- kors.txt 안에는 "70 80"이라는 텍스트가 저장되어 있음
- 해당 텍스트는 내부적으로 ASCII 코드로 아래와 같이 저장됨:
문자 | ASCII |
'7' | 55 |
'0' | 48 |
' ' (공백) | 32 |
'8' | 56 |
'0' | 48 |
따라서 FileInputStream이 읽어오는 순서:
55 48 32 56 48
('7''0'' ''8''0')
- Scanner는 이 바이트를 문자열 "70 80"으로 복원하여 처리
Scanner의 메서드 작동 방식
동작 방식 비교
- next()
- 공백 기준으로 토큰을 나누어 "70" → "80" 식으로 하나씩 반환
- 예: scan.next() → "70"
- nextInt()
- 공백 기준 문자열을 정수로 파싱
- 예: scan.nextInt() → 70 (문자 "70"을 정수 70으로)
- nextLine()
- 한 줄 전체를 읽어 "70 80" 문자열 반환
- 줄바꿈(\n)까지 읽음
바이트 ↔ 문자 ↔ 숫자 변환
1. 파일에 저장 | '7' '0' ' ' '8' '0' → ASCII 바이트 (55, 48, 32, 56, 48) |
2. FileInputStream | 바이트 단위로 읽음 |
3. Scanner | 바이트를 문자로 해석하고 "70"과 "80"을 인식 |
4. nextInt() | 문자열 "70" → 정수 70 변환 |
핵심 요약
- FileInputStream: 바이트 단위로 파일에서 읽기
- Scanner: 바이트 → 문자 → 문자열 또는 숫자 처리
- next() / nextInt() / nextLine() 메서드로 다양한 방식의 입력 처리 가능
'Java' 카테고리의 다른 글
Scanner.nextInt() (0) | 2025.07.22 |
---|---|
산술 연산자 (0) | 2025.07.19 |
파일 입력 스트림 (0) | 2025.07.19 |
버퍼와 스트림 (0) | 2025.07.19 |
PrintStream 객체 (0) | 2025.07.19 |