해결된 질문
작성
·
68
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
byte는 -128~127이고 int는 0~255 범위라 음수 부분이 전혀 겹치지 않는데, read()에서 어떤 방식으로 byte를 int로 변환하는 건지 대략적인 기준이 궁금합니다. 아스키 코드의 0~126까지는 그대로 int로 변환이 되고 그 외 byte의 음수가 그대로 int 나머지 범위(127~255)까지 배정되는 방식일까요?
+)아스키 코드(0~126)에 포함되지 않는 byte -128~-1까지의 대략적인 의미가 궁금합니다. 얘네는 영문 외 외국어나 추가 특수 문자들 같은 걸까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 자바재밌당님.
스트림의 read()
메소드가 int
를 반환하는 이유는 파일에서 읽어들인 바이트 데이터를 처리하기 위함입니다. read()
메소드는 바이트로 들어오는 데이터를 int
로 반환하여, 읽어드린 데이터의 끝(EOF, End Of File)을 구분하기 위해 사용하는데, 이때 -1을 반환하게 되어 byte
타입만을 사용할 수 없기 때문입니다.
질문에서 말씀하신 대로, 바이트는 0~255 범위의 int
로 변환됩니다. 음수 범위의 바이트 값을 양수 범위로 변환하면, Java에서 제공하는 int
는 0~255 값의 범위를 가지기 때문에 -128~-1
의 음수 범위는 데이터를 읽을 때 128~255에 맞춰지게 됩니다. 이는 바이트의 2의 보수 표현을 이용해 해결됩니다.
또한, 아스키 코드는 0~126 사이의 값으로 영문 알파벳, 숫자, 기본적인 특수문자들을 표현합니다. 이 범위를 넘는 값들은 아스키 확장 문자 집합 또는 다른 문자 집합(CJK 문자, 키릴 문자 등)에서 사용될 수 있습니다. 현대의 시스템에서는 주로 UTF-8이나 다른 유니코드 인코딩이 많이 쓰여 다양한 언어와 특별 문자를 처리합니다.
관련된 질문을 통해 추가적으로 공부하시기 바랍니다:
- 숫자와 문자의 2진수 숫자가 동일할 경우 타입에 대한 메타정보는 어디에 있나요
- 계산과 형변환 질문 있습니다!
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.