ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java IO <7 - Writer>
    언어/자바 2023. 12. 25. 23:30

     

     

    막연하게만 사용하던 I/O를 조금 더 이해해보고자 작성한 글입니다.
    기본적으로 I/O는 O/S 레벨에서 이루어지고 byte를 다룬다는 것을 생각야해합니다.
    자바 I/O 관련 마지막 글입니다

     

     


     

     

    Writer

    Reader 클래스와 비슷하게 OutputStream을 String기반으로 사용할 수 있도록 하는 클래스이다.

    Writer = OutputStream + String 핸들링

     

     

     

    1.FileWriter

    FileWriter를 사용하면 기존에 String을 byte[]로 변경해서 write작업을 수행하던 것을 하지않고 곧 바로 String을 사용해서 write를 할 수 있다.

     

    • FileOutputStream
    public static void main(String[] args) throws IOException {
       FileOutputStream fos = new FileOutputStream("파일경로");
    
        String msg = "파일 쓰기 기능";
        byte[] b = msg.getBytes();
    
        fos.write(b);
        fos.flush();
        fos.close();
    }

     

    • FileWriter
    public static void main(String[] args) throws IOException {
       FileWriter fw = new FileWriter("파일경로");
    
       String msg = "파일 쓰기 기능";
       fw.write(msg);
       fw.flush();
       fw.close();
    }

     

    2. OutputStreamWriter

    InputStreamReader와 마찬가지로 브릿지 역할을 하는 클래스

    • OutputStream
    public static void main(String[] args) throws IOException {
    
      Socket s = new Socket("localhost", 6000);
      OutputStream out = s.getOutputStream();
    
      String msg = "Hello from client";
      byte[] b = msg.getBytes();
    
      out.write(b);
      out.flush();
      out.close();
      
    }

     

    • OutputStreamWriter + BufferedWriter
      BufferedWriter를 위해서 Writer 타입이 필요하고, OutputStreamWriter를 이용해서 OutputStream을 Writer타입으로 변경할 수 있다.
    public static void main(String[] args) throws IOException {
    
          Socket s = new Socket("localhost", 6000);
          OutputStream out = s.getOutputStream();
          OutputStreamWriter osw = new OutputStreamWriter(out);
          BufferedWriter bufWriter = new BufferedWriter(osw);
    
          String msg = "Hello from client!!";
    
    
         bufWriter.write(msg);
         bufWriter.close();
         s.close();
         
      }

     

     

    3. BufferedWriter

    기본 매커니즘은 BufferedOutStream과 같지만, 추가적으로 newLine 메소드를 제공한다.
    문장을 쓰는 중간에 줄바꿈을 편하게 할 수 있다.

    public static void main(String[] args) throws IOException {
     
        FileWriter fos = new FileWriter("파일경로");
        BufferedWriter bw = new BufferedWriter(fos);
    
        String msg = "첫번째 컨텐츠";
        bw.write(msg);
        bw.newLine();                // 줄바꿈
    
        String msg2 = "두번째 컨텐츠";
        bw.write(msg2);
    
        bw.flush();
        bw.close();
    
     }

     

     

    4. BufferedWriter

    String 뿐만 아니라 int, char 등 다양한 타입들을 write할 수 있는 print와 println 함수를 제공한다. 객체 생성시에 autoFlush 기능도 추가가 가능하다.

    • 네트워크
      사용하기는 편하나, 성능을 생각한다면 BufferedWriter의 사용을 고려할 수 있다.
    public static void main(String[] args) throws IOException {
    
      Socket s = new Socket(ip, port);
      
      OutputStream out = s.getOutputStream();
      PrintWriter pw = new PrintWriter(out, true); // autoFlush
    
      String msg = "Hello from client!!";
      pw.println(msg); // String
      
      pw.println(123); // int
    
    }

     

    • 콘솔
      System.out 객체를 사용하면 콘솔 출력을 할 수 있다.
    public static void main(String[] args) throws IOException {
        OutputStream out = System.out;
        PrintWriter pw = new PrintWriter(out, true);
    
        String msg = "Hello from client@@";
        pw.println(msg);
        pw.println(123);
        pw.close();
      }

     

     

    5. StringWriter

    StringWriter 자체의 기능은 StringBuffer 혹은 StringBuilder를 통해서 구현이 가능하지만, Writer 타입으로 사용할 수 있는 이점이 있을 때 사용을 고려할 수 있겠다. (클래스 내부에서는 StringBuffer를 사용)

     public static void main(String[] args) throws IOException {
        StringWriter sw = new StringWriter();
    
        sw.write("hi ");
        sw.write("can u see ");
        sw.write("this sentence? ");
    
        String msg = sw.toString();
        System.out.println(msg);
    
    }

     

     

     


     

     

    Summary

    Writer 클래스는 Stream에 String 핸들링 로직을 더해서, String 관련 작업을 편하게 해주는 클래스이다.
    BufferedReader를 사용하면 newLine을 사용할 수 있다.
    PrintWriter는 다양한 타입의 출력을 지원한다.

     

     

     

    '언어 > 자바' 카테고리의 다른 글

    List.of와 NullPointExecption  (0) 2024.03.27
    List 정렬에 대하여  (1) 2024.01.12
    Java I/O <6 - Reader>통계  (1) 2023.12.25
    Java I/O <5 - Buffered Stream>  (0) 2023.12.25
    Java I/O <4 - Network Stream>  (1) 2023.12.25
Designed by Tistory.