페이지

2016년 12월 21일 수요일

[Java] Java I/O

앞서 split 과 Tokenizer 포스트에 이어 이번에는 자바의 입출력에 대해서 정리를 해볼까

한다.

먼저 Java에서는 크게 두가지의 I/O를 제공한다.

  1. 바이트 기반의 스트림
  2. 문자 기반의 스트림

그렇다면 스트림은 무엇일까?


"스트림이란 어떤 프로그램 외부의 데이터 리소스에서 프로그램과의 데이터 입출력을 

위하여 생성하는 일련의 통로다."

이렇게 스트림에 대한 정의를 짚어두고보면 , 두 가지의 차이점은 이름에서도 알 수 있듯이 

스트림의 입출력 단위가 바이트냐 , 아니면 문자 단위냐의 차이이다.

모든 파일은 Byte로 표현되있다. 이렇게 표현된 바이트를 읽고 쓰고 한다면 프로그램에는

큰 문제가 없다. 그러나 운영체제 별로 문자를 표현하는 방식에 있어서 사용되는 바이트

수가 다르기 때문에 문자 기반의 스트림이 생겨났다.

알다시피 JVM에서는 하나의 문자 , 즉 char 형이 2byte이다. 그렇기 때문에 한글과 같은

유니코드 문자들은 1byte로만 표현을 한다면 잘못 된 데이터로 나타나게 된다. 

그렇기 때문에 생겨난 것이 문자 기반의 스트림이다. 

문자 기반 스트림은 바이트 기반 스트림을 활용하여 사용 되어진다.

위 그림에 대하여 사람들이 많이들 사용하는 console 입출력으로 설명을 하자면 ,

byteinputstream(=System.in <= 위 바이트 스트림은 JVM에서 자동으로 지원한다.)을 읽는

InputStreamReader를 생성하고 이렇게 바이트 단위로 읽어지는 데이터들을 다시 또 

문자 기반 스트림(Reader ,Writer)으로  읽어드린다. 이 과정에서 인코딩 과정을 거쳐서

우리가 자바 프로그램에서 깨지지 않고 올바르게 볼 수 있게 된다. 

댓글 없음:

댓글 쓰기