[Java] 18. 파일 I/O with Buffer

김주희's avatar
Feb 26, 2025
[Java] 18. 파일 I/O with Buffer
수정필요
 
package ex18; import java.io.IOException; import java.io.InputStream; public class Buff01 { public static void main(String[] args) { // app -> os : app 기준에서 read하겠다는 것(read 선) InputStream in = System.in; try { int r = in.read(); // System.in 선을 통해서 1Byte 읽겠다. -> A를 입력해도 65, AA를 입력해도 65(1Byte만 읽으니까) // char r = (char) in.read(); 내가 직접 char로 캐스팅 가능 System.out.println(r); } catch (IOException e) { throw new RuntimeException(e); } } }
package ex18; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class Buff02 { public static void main(String[] args) { // 고정된 배열 만들어서 배열의 크기만큼 받는다. InputStream in = System.in; // decorate InputStreamReader rd = new InputStreamReader(in); // '내가 만든 고정 크기의 buffer'의 시작 // 고정 크기 - e.g. 주민번호 받을 때 유용 // ArrayList로 하더라도 크게 속도 차이(느려지지 X) 없으니까 arrayList로 처리 // collection(가변 크기)을 사용할 수 없을 때만 배열(고정 크기)로 처리 char[] buf = new char[4]; try { rd.read(buf); // 키보드 입력 대기 System.out.println(buf[0]); System.out.println(buf[1]); System.out.println(buf[2]); System.out.println(buf[3]); } catch (IOException e) { throw new RuntimeException(e); } } }
package ex18; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Scanner; public class Buff03 { public static void main(String[] args) { // 결론 - Buff01, Buff02 사용할 일X // Decorator 패턴 /* InputStream in = System.in; // 객체 재사용 -> 의존 (Composition) : 생성자에 주입 // 기능의 확장 InputStreamReader rd = new InputStreamReader(in); // 가변이라는 기능 확장 BufferedReader br = new BufferedReader(rd); */ // Scanner와 BufferedReader는 동일한 기능을 한다. // Scanner sc = new Scanner(System.in); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // System.in : 키보드에만 접근 가능 try { String line = br.readLine(); System.out.println(line); } catch (IOException e) { throw new RuntimeException(e); } } }
package ex18; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; // 버퍼는 꽉 차야 전송된다. // (버퍼의)프로토콜 : \n(엔터) (문자를 전달하고 싶으면 종단 기호를 넣어야 함. 없으면 끝이 안났다고 생각해서 읽지 않는다.) public class Buff04 { public static void main(String[] args) { // 버퍼 - 8192 Byte BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 모니터에 연결 try { bw.write("안녕\n"); // 한글 2자 - 4Byte bw.flush(); // 버퍼가 꽉 차지 않더라도 전송하는 방법 - 물을 흘려줘야 된다. } catch (IOException e) { throw new RuntimeException(e); } } }
package ex18; import java.io.PrintWriter; import java.util.Scanner; public class Buff05 { public static void main(String[] args) { PrintWriter out = new PrintWriter(System.out, true); out.println("Hello World"); // println에 의해 \n이 붙고 autoFlush에 의해 버퍼가 꽉 차지 않아도 자동으로 Flush된다. Scanner sc = new Scanner(System.in); String s = sc.nextLine(); System.out.println(s); } }
Share article

jay0628