본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

문자스트림, 바이트스트림을 보완하다 FileReader/ FileWriter CharArrayReader/CharArrayWriter PipedReader/PipedWriter StringReader/StringWriter

Java에서 char형은 1byte가 아니라 2byte이기에 바이트기반 스트림으로 2byte문자를 처리하는데에 어려움이 있다.

바이트기반스트림를 보완하기 위해 문자기반스트림이 제공된다.

InputStream Reader

OutputStream Writer

https://standout.tistory.com/1470

 

스트림 - 바이트기반 스트림: InputStream OutputStream

앞서 스트림과 입출력에 대해 배워봤다. https://standout.tistory.com/106 스트림이란? Stream 개울, 흘러가는것, 가는길 데이터를 운반하는데 사용되는 연결통로 https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%8A%B8%EB%A6%

standout.tistory.com

 

 

FileReader & FileWriter
FileReader 클래스는 파일에서 문자를 읽어오는 Reader의 서브 클래스이며, 
FileWriter 클래스는 파일에 문자를 쓰는 Writer의 서브 클래스.

     import java.io.FileReader;
     import java.io.FileWriter;
     import java.io.IOException;

     public class FileExample {
         public static void main(String[] args) {
             try {
                 FileReader reader = new FileReader("input.txt");
                 FileWriter writer = new FileWriter("output.txt");
                 int character;

                 while ((character = reader.read()) != -1) {
                     writer.write(character);
                 }

                 reader.close();
                 writer.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }

[출력결과]
input.txt 파일의 내용을 output.txt 파일로 복사합니다.

 

 

 

CharArrayReader & CharArrayWriter
CharArrayReader 클래스는 char 배열에서 문자를 읽어오는 Reader의 서브 클래스이며, CharArrayWriter 클래스는 char 배열에 문자를 쓰는 Writer의 서브 클래스.

     import java.io.CharArrayReader;
     import java.io.CharArrayWriter;
     import java.io.IOException;

     public class CharArrayExample {
         public static void main(String[] args) {
             char[] chars = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'};
             try {
                 CharArrayReader reader = new CharArrayReader(chars);
                 CharArrayWriter writer = new CharArrayWriter();

                 int character;
                 while ((character = reader.read()) != -1) {
                     writer.write(character);
                 }

                 System.out.println(writer.toString());

                 reader.close();
                 writer.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }

[출력결과]
"Hello World" 문자열이 출력됩니다.

 

 

 

PipedReader & PipedWriter
PipedReader 클래스는 다른 스레드에서 출력하는 데이터를 읽는 Reader의 서브 클래스이며,

PipedWriter 클래스는 다른 스레드에 데이터를 출력하는 Writer의 서브 클래스.

import java.io.*;

public class PipedExample {
    public static void main(String[] args) {
        try {
            // PipedWriter와 PipedReader 생성
            PipedWriter writer = new PipedWriter();
            PipedReader reader = new PipedReader(writer);

            // 다른 스레드에서 데이터를 쓰는 스레드 시작
            Thread writerThread = new Thread(new WriterTask(writer));
            writerThread.start();

            int data;
            // 파이프로부터 데이터를 읽어오는 작업
            while ((data = reader.read()) != -1) {
                System.out.print((char) data);
            }

            // 스레드 종료
            writerThread.join();

            // 스트림 닫기
            reader.close();
            writer.close();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

// 다른 스레드에서 데이터를 쓰는 작업을 수행하는 클래스
class WriterTask implements Runnable {
    private final PipedWriter writer;

    public WriterTask(PipedWriter writer) {
        this.writer = writer;
    }

    @Override
    public void run() {
        try {
            // 데이터를 쓰는 작업
            for (char ch = 'A'; ch <= 'Z'; ch++) {
                writer.write(ch);
                // 작은 딜레이를 주어서 데이터가 조금씩 쓰여지도록 함
                Thread.sleep(100);
            }
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        } finally {
            try {
                // 쓰기 완료 후 파이프 닫기
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

 

 

 

 

StringReader & StringWriter
StringReader 클래스는 문자열에서 문자를 읽어오는 Reader의 서브 클래스이며, StringWriter 클래스는 문자열에 문자를 쓰는 Writer의 서브 클래스.

  import java.io.StringReader;
     import java.io.StringWriter;
     import java.io.IOException;

     public class StringWriterExample {
         public static void main(String[] args) {
             String input = "Hello World";
             try {
                 StringReader reader = new StringReader(input);
                 StringWriter writer = new StringWriter();

                 int character;
                 while ((character = reader.read()) != -1) {
                     writer.write(character);
                 }

                 System.out.println(writer.toString());

                 reader.close();
                 writer.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }

[출력결과]
"Hello World" 문자열이 출력됩니다.