읽고 쓸수있는 클래스들을 크게 두가지로 나뉘는데

바이트 단위로 읽고 쓸 수 있는    바이트 스트림 클래스

문자 단위로 읽고 쓸 수 있는       문자    스트림 클래스

로 나뉜다.

 

자바가 처음 등장했을 때에는 바이트 단위로 읽고 쓸 수 있는 바이트 스트림 클래스만 존재했지만, 2바이트 문화권인 한국, 중국, 일본등의 영향으로 문자 스트림 클래스가 추후에 추가되었다. 이는 한글을 입출력하는 프로그램의 경우, 문자 스트림 클래스를 사용하는 것이 유리하다는 것을 의미한다.

 

 클래스에 사용된 단어

의미

 Stream으로 끝나는 클래스

byte 단위 IO 클래스

 InputStream으로 끝나는 클래스

byte 단위로 입력받는 클래스

 OutputStream으로 끝나는 클래스

byte 단위로 출력받는 클래스

 Reader끝나는 클래스

문자 단위로 입력받는 클래스

 Writer끝나는 클래스

문자 단위로 출력받는 클래스 

 File시작할 경우

파일로부터 입력이나 출력하는 클래스

 ByteArray시작할 경우 

입력클래스의 경우 ByteArray로 읽어들이고, 출력클래스의 경우 클래스 내부의 자료구조에 출력한 후 출력된 결과를 ByteArray로 리턴 

 CharArray시작할 경우

입력클래스의 경우 CharArray로 읽어들이고, 출력클래스의 경우 클래스 내부의 자료구조에 출력한 후 출력된 결과를 CharArray로 리턴

 Filter로 시작할 경우

Filter로 시작하는 IO 클래스는 직접 사용하는 것보다는 상속을 받아 사용하며 사용자가 원하는 내용만 필터링할 목적으로 사용 

 Data로 시작할 경우

다양한 데이터 형식을 입출력할 목적으로 사용된다. 특히 기본형 값(int, float, double)을 출력하는데 유리

 Buffered로 시작할 경우

프로그램에서 Buffer라는 말은 메모리를 의미한다. 입출력 시에 병목현상을 줄이고 싶을 경우 사용

 RandomAccessFile

입력이나 출력을 모두 할 수 있는 클래스로써 파일에서의 임의 위치의 내용을 읽거나 쓸 수 있는 기능을 제공

 

 출처 : 자바 I/O & NIO 네트워크 프로그래밍, 김성박.송지훈 공저

 

자바 IO 관련 클래스는 생성자가 중요한 역할을 한다. 생성자에 어떤 것을 지정했느냐에 따라서 읽어 들여야할 대상과 써야 대상이 틀려 지기 때문이다.(메소드도 마찬가지이다. 메소드에 전달되는 인자가 경우에 따라서 읽어들이는(또는 쓰여지는) 변수가 되고 반환되는 값은 읽어들인(씌여진) 바이트수가 되는 경우가 있다.)

 

바이트 스트림 클래스와 문자 스트림 클래스

 

바이트 스트림 클래스와 문자 스트림 클래스의 계층 구조로 나누면 다음 그림과 같다.

 

바이트 스트림 (저수준 입출력)

ü  1 바이트(8 Bit)를 읽고 쓰기 위한 스트림

ü  2진 데이터 입출력 가능

ü  InputStream, OutputStream 클래스(추상 클래스)와 그 하위 클래스를 이용

 

 

문자 스트림 (고수준 입출력)

ü  16비트(2Byte)로 표현되는 유니코드(nuicode), 문자 단위의 입출력을 다루는 스트림

ü  Reader, Writer 클래스(추상 클래스)와 그 하위 클래스를 이용

           

 

*** 바이트단위 IO와 문자단위 IO클래스 모두 사용법은 비슷하다. 단지 차이가 있다면 바이트단위냐 문자단위로 입출력하느냐의 차이다.

*** 바이트단위 IO클래스와 문자단위 IO클래스가 완전히 따로 사용하지 않는 다는 것이 중요하다.

      >> 문자단위 IO클래스에는 InputStreamReader와 OutputStreamWriter클래스가 있는데 이 두가지 클래스는

           바이트단위 IO클래스와 문자단위 IO클래스간에 다리 역할을 함으로써 서로 협력해서 사용할 수 있게 해준다.

 

 

바이트 스트림과 문자단위 스트림의 비교

ü  바이트 스트림 : 바이트 또는 문자 단위의 입출력만 제공

ü  문자단위 스트림 : 다양한 기본 변수 타입 단위의 입출력이나 버퍼링을 이용한 빠른 입출력 제공하며 문자단위 스트림의 경우 직접 생성할 수 없고, 바이트 스트림을 만든 후 이것을 인자로 문자 스트림을 만들어야 함.

 

Posted by Steven J.S Min
,