-
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