Java

Scanner

1space 2025. 7. 19. 13:26

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의 메서드 작동 방식

동작 방식 비교

  1. next()
    • 공백 기준으로 토큰을 나누어 "70" → "80" 식으로 하나씩 반환
    • 예: scan.next() → "70"
  2. nextInt()
    • 공백 기준 문자열을 정수로 파싱
    • 예: scan.nextInt() → 70 (문자 "70"을 정수 70으로)
  3. 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