inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!

입력과 출력

read(), read(byte[]) 한글 출력 아스키코드 다름 문의

487

코코볼

작성한 질문수 8

1

각각의 메소드가 한글을 다르게 출력해요.

read() 는 한글을 모두 정수에 백번대의 숫자로 표기하고

read(byte[])는 모두 음수로 표기합니다 숫자도 십번대 또는 백번대로 표기하구요.

차이점을 모르겠습니다.

한글이 문제인것 같지만 왜 이렇게 다르게 결과가 나오는지 정확한 사유를 알고싶어요~

java

답변 1

2

sys

이 질문에 의견을 드리기 위해 여러가지를 찾다보니 제법 괜찮은 답에 도달한 것 같습니다. 저는 txt파일을 UTF-8형식으로 저장했습니다. 

https://bit.ly/3mCYkxJ(참고자료)

UTF-8 방식은 즉, 유니코드는 세계적으로 표준화된 문자셋입니다. 여기서 영어와 숫자는 1Byte 그리고 한글은 (받침과 관계없이) 3Byte를 차지합니다. 그래서 read()를 하게되면 한글 한글자당 총 3줄의 data(byte)가 출력됩니다.

https://bit.ly/32E12vC(참고자료)

그런데 이 한글은 조합형으로 만들기에는 상당히 비효율적이어서 UTF-8에선 완성형으로 등록이 되어있습니다. 따라서 해당하는 글자가 없다면 이상한 숫자가 나올 수도 있습니다. 이를 바탕으로 질문하고픈 점에 대해 간략하게 말씀드리겠습니다.

1. 한글은 한 글자당 3바이트인데 Byte배열에 쑤셔넣으려는 상황이라 오버플로우가 발생했다. (영어는 글자당 1Byte이기에 관계가 없다.)

Byte배열은 인덱스당 1바이트씩 저장하는데 한글은 한글자가 3바이트씩이나 되서 이를 감당하지 못해 발생하는 일이 아닐까 생각합니다.

2. 숫자는 ASCII코드 상 백번대 이상의 숫자가 나오지 않습니다. 48~57 (0~9)  이건 직접 넣어가면서 확인하실 수 있을 겁니다.

*증빙자료: 빨강색: read() / 파랑색:read(byte[])

1. 한글 '어'가 총 3개의 바이트를 뽑아내는 것을 알 수 있다.

2. byte 자료형은 최대  0~128까지 숫자밖에 표현하지 못한다. 그 이상이 되면 음수로 표현한다.

bs[0]의 경우: (선생님의 표현방식은 다를 수 있어도 역할은 동일합니다.)

236 - 128 = 108

108 - 128 = -20

이와 같은 원리로 -20이 나옵니다. (자세한 건 오버플로우에 대해 꼭 검색해보시길 바랍니다.)

(사진은 오른쪽 마우스에 새 탭으로 열기를 누르시면 큰 화면으로 볼 수 있습니다.) 정확한 정답은 아닐 가능성이 높지만 여러가지로 깊은 고민을 하게 되었습니다. 감사합니다.

서식 문자 실습 중 콘솔 결과값 글자 깨짐

0

555

1

19-4 : super 클래스 부분에서

0

378

1

비트를 뒤에서부터 읽으셔서 궁금해서 질문드립니다!

1

650

1

배열예제 오류

0

389

1

GC 동작시기가 궁금합니다.

0

374

0

자바 18버전으로 다운받아도 되나요?

0

533

1

클래스 생성과 관련하여 질문 있습니다

0

265

0

형변환시 신규 메모리가 할당 되는지

0

349

0

Socket을 null로 처음에 선언해주는 이유가 뭘까요?

0

301

0

반환값 용도

0

337

1

블로그 작성

0

316

0

삼항연산자 잘못 적으셨어요

0

264

1

어느것부터 다운로드를 해야하는지 좀 막히네요

0

352

1

inputStream.read()질문드립니다

0

325

1

System.out.println("i + j = " + (i+j); 이렇게 쓰는 이유가 뭔가요? " "i + j " = (i +j)라고 쓸수 있는거 아닌가요?

0

366

1

<for문> 예시 작성시 에러발생 질문드립니다

0

577

2

이해가 안가는 부분이 있습니다.. 선생님들.. 도와주세요..!!

0

314

1

인터페이스를 사용 하는 이유가 무엇인가요?..

0

737

1

혹시 영상 만드시고 업로드 전 확인 안하시나요..? 잡음..

1

303

1

이해가 안가는게 있습니다

0

310

2

jdk-16.0.1은 jre가 없이 jdk만 설치되는게 정상인가요?

0

497

1

메모장을 실행하실때

0

310

1

강의 중 말씀해주신 형변환된 코드가 알고 싶어요.

0

227

2

메모장이안돼요 처음에

0

276

0