한다.
먼저 Java에서는 크게 두가지의 I/O를 제공한다.
- 바이트 기반의 스트림
- 문자 기반의 스트림
그렇다면 스트림은 무엇일까?
"스트림이란 어떤 프로그램 외부의 데이터 리소스에서 프로그램과의 데이터 입출력을
위하여 생성하는 일련의 통로다."
이렇게 스트림에 대한 정의를 짚어두고보면 , 두 가지의 차이점은 이름에서도 알 수 있듯이
스트림의 입출력 단위가 바이트냐 , 아니면 문자 단위냐의 차이이다.
모든 파일은 Byte로 표현되있다. 이렇게 표현된 바이트를 읽고 쓰고 한다면 프로그램에는
큰 문제가 없다. 그러나 운영체제 별로 문자를 표현하는 방식에 있어서 사용되는 바이트
수가 다르기 때문에 문자 기반의 스트림이 생겨났다.
알다시피 JVM에서는 하나의 문자 , 즉 char 형이 2byte이다. 그렇기 때문에 한글과 같은
유니코드 문자들은 1byte로만 표현을 한다면 잘못 된 데이터로 나타나게 된다.
그렇기 때문에 생겨난 것이 문자 기반의 스트림이다.
문자 기반 스트림은 바이트 기반 스트림을 활용하여 사용 되어진다.
위 그림에 대하여 사람들이 많이들 사용하는 console 입출력으로 설명을 하자면 ,
byteinputstream(=System.in <= 위 바이트 스트림은 JVM에서 자동으로 지원한다.)을 읽는
InputStreamReader를 생성하고 이렇게 바이트 단위로 읽어지는 데이터들을 다시 또
문자 기반 스트림(Reader ,Writer)으로 읽어드린다. 이 과정에서 인코딩 과정을 거쳐서
우리가 자바 프로그램에서 깨지지 않고 올바르게 볼 수 있게 된다.
댓글 없음:
댓글 쓰기