[JAVA] 문자 Stream : Reader / Writer

2019. 8. 7. 10:33 JAVA/Java IO


문자 Stream : Reader / Writer




문자 Stream은 16비트 문자나 문자열들을 읽고 쓰기 위한 스트림이고 모두 Reader / Writer의 하위 클래스이다.


문자 입출력 스트림은 영어 이외의 문자에 대한 처리와 문자 인코딩을 내부에서 처리해 주고, 유니코드를 지원하는 자바 특성에 맞게 2바이트 크기의 입출력을 한다. 따라서 문자 스트림을 이용하게 되면 특별한 문자 인코딩에 독립적인 프로그램을 작성할 수 있고 일반적으로 구현에서도 더 효율적일 수 있다.


Reader / Writer 는 문자 입출력을 담당하는 추상 클래스로 다른 문자 입출력 클래스들에 대한 최상위 클래스이다.


Byte Stream의 최상위 클래스로 InputStream / OutputStream 클래스가 있듯이 Character 단위의 입출력을 담당하는 최상위 클래스로는 Reader / Writer 클래스가 있다.


[JAVA] ByteStream : InputStream / OutputStream


이 두 클래스도 추상 클래스이기 때문에 실제 객체를 생성할 수는 없다.


① Reader 


Reader 클래스는 Character 단위의 입력을 대표하는 최상위 추상 클래스이다. 따라서 객체를 직접 생성할 수 없으며 후손 객체를 가리키는 레퍼런스의 형태로 사용된다. 그리고 이 클래스에 존재하는 메소드는 후손 객체에게 상속되거나 재정의되어 사용된다.


데이터를 읽기 위한 메소드인 read() 메소드가 가장 중요한 의미를 가지며 바이트 단위가 아닌 char 단위로 입력된다는 것만 주의하면 된다.


* Reader 클래스의 메소드


Reader 클래스의 메소드 

설명 

abstract void close() throws IOException 

 문자 입력 스트림을 닫는다. 

void mark(int limit) throws IOException 

 문자 입력 스트림의 현재 위치를 표시한다. 

 boolean markSupported()

 문자 스트림이 mark() 메소드가 지정되어 있는지 여부를 반환한다.

int read() throws IOException 

 문자 입력 스트림에서 단일 문자를 읽는다.

int read(char buf[]) throws IOException 

 문자 입력 스트림에서 buf[] 크기만큼을 읽어 buf에 저장하고 읽은 문자 수를 반환한다. 

abstract int read(char buf[], int off, int len) throws IOException 

 문자 입력 스트림에서 len 만큼을 읽어 buf[]의 off 위치에 저장하고 읽은 문자 수를 반환한다. 

 int read(CharBuffer target) 

throws IOException

 CharBuffer 형인 target에 문자열을 읽어 온다.

boolean ready() throws IOException 

 문자 입력 스트림이 준비되었는지 리턴한다.

void reset() throws IOException 

 문자 입력 스트림을 mark된 위치로 되돌린다. 

long skip(long l) throws IOException 

 주어진 개수 l 만큼의 문자를 건너뛴다. 


② Writer 클래스


Writer 클래스는 Character 단위의 출력을 대표하는 최상위 추상 클래스이다. Reader 클래스와 마찬가지로 추상 클래스이기 때문에 객체를 생성할 수 없으며 후손 클래스의 레퍼런스 변수로 쓰일 수 있다.

대표적인 메소드는 write() 메소드인데 char 단위로 출력하는 것과 함께 String을 출력하는 것도 가능하다.


출력은 버퍼로 나가며 flush() 메소드를 적절한 때에 호출하여 버퍼에서 직접 도착 지점으로 데이터를 전송한다.


Writer 클래스의 메소드 


Writer 클래스의 메소드 

 설명

 Writer append(char c) throws IOException

 Writer에 Character c 를 추가한다.

 Writer append(CharSequence csq) throws IOException

 Writer에 CharSequence csq 를 추가한다. 

 Writer append(CharSequence csq, int start, int end) throws IOException

 Writer에 CharSequence csq 의 start 부터 end까지의 문자를 추가한다.

abstract void close() throws IOException 

 문자 출력 스트림을 닫는다. 

abstract void flush() throws IOException 

 버퍼에 남은 출력 스트림을 출력한다. 

void write(String s) throws IOException 

 주어진 문자열 s를 출력한다. 

void write(char buf[]) throws IOException 

 buf의 내욕ㅇ을 출력한다. 

void write(char buf[], int off, int len) throws IOException 

 buf의 off 위치부터 len 만큼의 문자를 출력한다. 

void write(String s, int off, int len) throws IOException

 주어진 문자열 s에 있는 문자들을 off 위치부터 len 만큼 출력한다. 



JAVA API DOC : Reader

JAVA API DOC : Writer



출처: https://hyeonstorage.tistory.com/246?category=578560 [개발이 하고 싶어요]