JAVA/JAVA Basic

[ JAVA ] 스트림이란? ( 바이트 기반 스트림 , 문자 기반 스트림 )

IT록흐 2021. 7. 8. 01:04
반응형

 

스트림(Stream)에 대해서 파헤쳐보자.

 

 

 

[ JAVA ] 문자 인코딩(Character Encoding)이란?

인간과 컴퓨터가 대화하려면 어떻게 할까? 인간의 언어는 문자, 이미지, 동영상, 소리 등이 있다. 그러나 컴퓨터는 1과 0밖에 모른다. 그러므로 우리는 문자, 이미지, 동영상, 소리를 1과 0에 대응

lordofkangs.tistory.com

 

[ JAVA ] JVM이 문자열을 UTF-16 방식으로 저장하는 이유

포스팅 전 이 글은 아래 사이트 글을 토대로 한 저의 추측임을 알립니다. Why Java char uses UTF-16? Recently I read lots of things about Unicode code points and how they evolved over time and sure I rea..

lordofkangs.tistory.com

 

 

지난 두 가지 포스팅에서

문자 인코딩을 다루었다.

 

인간이 사용하는 문자는

이진수로 컴퓨터에게 전달된다.

 

문자를 어떤 방식으로 이진수로 표현할 것인가? 

 

 

이것이 '인코딩'이다.

 

문자 뿐만 아니라 이미지, 동영상, 소리도

이진수로 '인코딩' 된다. 

 

그렇게

데이터는 이진수의 나열로 바뀌는데

이진수의 흐름을 바이트 단위로 읽어들인다.

이러한 흐름을 '스트림(Stream)'이라 한다.

 

 

바이트 기반 스트림

 

거의 대부분의 인코딩 방식에서

아스키 코드 문자는 1byte의 이진수로

똑같이 표현된다.

 

128가지 아스키 코드 문자

그래서

위의 128가지 문자는

1byte로 표현된다.

 

그리고 이미지와 동영상도 1byte씩 모여 표현된다.

 

이렇듯,

1byte가 데이터 단위가 되는 스트림을

바이트 스트림이라 부른다.

 

문자 기반 스트림

 

128가지 문자 외의 

문자가 사용되면 인코딩을 신경써야한다.

 

인코딩마다 문자 하나를 나타낼 때,

사용되는 byte 개수가 다르기 때문이다.

 

JVM은 문자를 UTF-16 인코딩 방식을 사용하여 메모리에 저장한다. 그러므로 문자가 기본언어판(BMP)에 속하는 문자라면 2byte로 표현된다. 그래서 char 자료형이 2byte이다. 우리가 프로그램 안에서 문자 데이터를 사용하려면 우선 UTF-16 방식으로 인코딩하여 메모리에 저장해야 한다.

 

 

그러나 외부에서 들어오는 문자데이터는 UTF-16 인코딩 방식이 아니다. UTF-8, MS949 등등 다양한 인코딩 방식의 문자데이터가 들어온다. 그러므로 프로그램 밖에서 들어오는 문자데이터를 UTF-16 인코딩 방식으로 바꾸는 과정이 필요한다. 이 과정을 담당하는 객체가 InputStreamReader 객체이다. 자세한 것은 다음 포스팅에서 다루어 보겠다.

 

 

 


 

이와 같이,

스트림(Stream)이란,

인간이 사용하는 문자, 이미지, 동영상을

이진수(바이트) 흐름으로 나타낸 것이다.

 

이때, 이진수를 어떻게 표현하느냐를 두고 인코딩(Encoding)이라 부르고 인코딩 방식에 따라 할당되는 메모리 크기가 달라진다. 아스키 코드 문자가 아닌 경우, 문자를 표현하는데 사용되는 바이트의 개수가 인코딩 방식마다 다르므로 인코딩에 각별히 신경써야 한다.

반응형