morijwana
수로그
morijwana
전체 방문자
오늘
어제
  • 분류 전체보기
    • 강의노트
    • Machine Learning
      • Pandas
      • NLP
    • Computer Science
      • Linux
      • TIL
    • Development
      • React
      • Swift
      • Javascript
    • 스터디 기록
      • Clean Code
      • 구글 BERT의 정석
      • 개발도서
      • 기타
    • Problem Solving
      • Baekjoon
      • ICPC Sinchon
    • 끄적
      • 끄적끄적
      • 요리왕

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Pandas
  • Bert
  • 백준
  • ML
  • 프로그래밍언어론
  • GDSC Sookmyung
  • 개발도서
  • 구글BERT의정석
  • 민트하임스터디
  • Solution Challenge
  • gdsc
  • nlp
  • cs224n
  • 구부정스터디
  • 자연어처리
  • Python
  • 데이터사이언스
  • word2vec
  • 프레임워크없는프론트엔드개발
  • 회고

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morijwana

수로그

Computer Science/TIL

Java의 InputStream/OutputStream과 한글 깨짐 현상

2020. 10. 16. 01:10

오늘의 궁금증 토픽: 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
    'Computer Science/TIL' 카테고리의 다른 글
    • [C++/Cython] macOS에서 Python.h: No such file or directory 에러 해결 방법
    morijwana
    morijwana
    행복한 휴학생의 devlog

    티스토리툴바