오늘의 궁금증 토픽: Java의 InputStream/OutputStream과 한글 깨짐 현상
틀린 정보가 있다면 댓글로 날려주시면 감사하겠습니다..
궁금한 점 1: 한글은 2바이트인데 왜 바이트 단위로 읽고 쓰는 FileInputStream과 FileOutputStream을 통해 입/출력할 때 깨지지 않는 것인가?
한글을 표현하는 2바이트 크기의 이진수에서 하위 1바이트만 남기고 상위 1바이트는 버리는 것이 아니라 그냥 2바이트 짜리를 1바이트/1바이트로 나눠서 저장하는 거였다. 따라서 정보의 손실은 없다.
궁금한 점 2: FileReader를 통해 읽어들인 파일을 FileOutputStream을 통해 출력하면 왜 한글이 깨지지?
FileReader와 FileWriter같은 문자열 입출력 스트림은 디폴트 인코딩이 UTF-8인 반면에 InputStream과 OutputStream은 그렇지 않다. 이건 인코딩 문제다.
추가로 알게 된 사실
동기 언니와 위의 문제로 3시간 가량 열띤 토론과 실험을 진행하다 알게 된 사실인데, BufferedOutputStream을 사용할 때 버퍼 크기를 홀수로 설정하고 한글을 입력으로 준 후 읽어들이는 반복문 내에서 Thread.sleep(100);
으로 텀을 주면 마지막 한글이 깨진다. 마지막 한글은 필연적으로 2바이트 중 1바이트만 출력되기 때문에 발생하는 일인 것 같다.
'Computer Science > TIL' 카테고리의 다른 글
[C++/Cython] macOS에서 Python.h: No such file or directory 에러 해결 방법 (0) | 2021.06.28 |
---|