막연하게만 사용하던 I/O를 조금 더 이해해보고자 작성한 글입니다.
기본적으로 I/O는 O/S 레벨에서 이루어지고 byte를 다룬다는 것을 생각야해합니다.
자바 I/O 관련 마지막 글입니다
Reader 클래스와 비슷하게 OutputStream을 String기반으로 사용할 수 있도록 하는 클래스이다.
Writer = OutputStream + String 핸들링
FileWriter를 사용하면 기존에 String을 byte[]로 변경해서 write작업을 수행하던 것을 하지않고 곧 바로 String을 사용해서 write를 할 수 있다.
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();
}
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("파일경로");
String msg = "파일 쓰기 기능";
fw.write(msg);
fw.flush();
fw.close();
}
InputStreamReader와 마찬가지로 브릿지 역할을 하는 클래스
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();
}
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();
}
기본 매커니즘은 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();
}
String 뿐만 아니라 int, char 등 다양한 타입들을 write할 수 있는 print와 println 함수를 제공한다. 객체 생성시에 autoFlush 기능도 추가가 가능하다.
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
}
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();
}
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);
}
Writer 클래스는 Stream에 String 핸들링 로직을 더해서, String 관련 작업을 편하게 해주는 클래스이다.
BufferedReader를 사용하면 newLine을 사용할 수 있다.
PrintWriter는 다양한 타입의 출력을 지원한다.