CharArrayReaderCharArrayWriter의 사용

다음 코드는 ByteArrayInputStreamByteArrayOutputStream사용과 유사하나 바이트 배열이아닌 char 배열을 사용한다는 차이점이 있다.

 

 

package ch5;

 

import java.io.BufferedWriter;

import java.io.CharArrayReader;

import java.io.CharArrayWriter;

import java.io.FileReader;

import java.io.IOException;

import java.io.OutputStreamWriter;

 

public class CharArrayInputOutputTest {

 

       public static void main(String[] args) {

              if (args.length != 1) {

                     System.out.println("사용법 : java CharArrayInputOutputTest 파일명");

                     System.exit(0);

              } // if end

 

              FileReader fis = null;

              CharArrayReader bais = null;

              CharArrayWriter baos = null;

              try {

                     fis = new FileReader(args[0]);

                     baos = new CharArrayWriter();

                     char[] buffer = new char[512];

                     int readcount = 0;

 

                     while ((readcount = fis.read(buffer)) != -1) {

                           baos.write(buffer, 0, readcount);

                     }

 

                     char[] fileArray = baos.toCharArray();

                     System.out.println("파일의 내용을 모두 읽어들여 Char[] 만들었습니다.");

                     System.out.println("읽어들인 Char :" + fileArray.length);

 

                     bais = new CharArrayReader(fileArray);

                     BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

 

                     while ((readcount = bais.read(buffer)) != -1) {

                           bw.write(buffer, 0, readcount);

                           bw.flush();

                     }

                     System.out.println("\n\n");

                     System.out.println("읽어들인 내용을 모두 출력했습니다.");

              } catch (Exception ex) {

                     System.out.println(ex);

              } finally {

                     try {

                           fis.close();

                           bais.close();

                           baos.close();

                     } catch (IOException ioe) {

                           System.out.println(ioe);

                     }

              }

       }

}

 

 

 

위 코드의 두번째 while문에서 CharArrayReader는 다음의 API와 같이 char배열 형태로 read() 메소드(java.io.Reader로 부터 상속받은 메소드)를 이용해서 읽어들이기 때문에 바이트 배열을 출력하는 메소드를 가진 System.out을 사용 할 수 없다.

 

int read(char[] cbuf)

          : Reads characters into an array.

따라서 System.out OutputStreamWriter의 인자로 지정해서 문자 단위의 입출력이 가능하도록 했다.

 

또한 OutputStreamWriter에있는 write()메소드를 이용해서 출력해도 되지만 좀더 성능을 높이기위해 BufferedWriter의 생성자에 OutputStreamWriter객체를 지정함으로서 병목현상을 없앴다.

 

BufferedWriter의 경우 write()메소드를 이용해서 출력 후 flush() close()메소드를 출력해야만 버퍼안에 저장된 내용이 완전하게 출력된다.,

 

 

Posted by Steven J.S Min
,