[Java] [입출력] BufferedReader 와 BufferWriter

Updated:

용어 정리

  • Buffer(버퍼) : 데이터를 A에서 B로 전송하는 중간에 일시적으로 데이터를 보관하는 임시 메모리 영역. 입출력의 효율을 높여준다
  • Buffer flush(버퍼 플러시) : 버퍼에 남아 있는 데이터를 출력시킨다. (버퍼비움)
  • BufferedReader : 버퍼를 이용한 입력
  • BufferedWriter : 버퍼를 이용한 출력

Buffer 함수


  • 버퍼를 이용하기 때문에 입출력의 효율이 Scanner/System.out.print()보다 좋아진다 buffer이용
  • 한번 거쳐서 가기 때문에 느릴 것 같지만 빠른 이유 : 하드디스크는 원래 속도가 아주 느리므로 키보드가 눌릴 때마다 눌린 데이터를 즉시 이동시키기보다 메모리 버퍼에 데이터를 묶었다가 이동시키는게 효율적이다.
  • 많은 데이터를 입력받아야 할 상황에서 주로 이용한다.

BufferedReader


  • Scanner와 비교
    • Scanner는 띄어쓰기와 엔터를 경계로 입력값을 인식하기 때문에 가공이 필요없어서 편하지만 BufferedReader는 엔터만 경계로 인식하고 받은 데이터가 String으로 고정되므로 데이터를 가공해야하는 경우가 많다.
  • 사용
    import java.io.*;
    ~
    
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    // 콘솔에서 입력받는 경우
    
    FileReader fr = new FileReader("파일명.java");
    BufferedReader br_f = new BufferedReader(fr);
    // 파일에서 입력받는 경우
    
    int num - Integer.parseInt(br.readLine());
    // 기본값 : String
    br.close();
    //입출력이 끝난 후 종료
    
    String line = "";
    for(int i =1; (line = br_f.readLine()) !=null; i++){
      System.out.println(line);
    }
    
  • 함수

    반환 함수 설명
    void Close() 입력스트림을 닫고 사용하던 자원을 푼다
    int read() 한 글자만 읽어 정수형으로 반환해준다. ex) ‘3’입력 → ‘3’의 정수형 51 반환
    boolean ready() 입력스트림을 사용할 준비가 되었는지 확인. 1 = 준비완료
    String readLine() 한 줄을 읽어서 String으로 반환
         

BufferedWriter


  • System.out.print()와 비교
    • System.out.print()는 문자열출력과 개행을 동시에 해주지만 BufferedWriter는 개행을 하려면 “\n”을 넣거나 newLine함수를 이용해야한다.
  • 사용
      import java.io.*;
      ~
    
      BufferedWriter bw = new BufferedWriter(new FileWriter("파일명.java"));
      bw.write("hello"); //
      bw.newLine(); // 개행(엔터)
      bw.write("good\n"); // r개행과 함께 출력
      bw.flush(); //남은 데이터 모두 출력
      bw.close(); 스트림 닫기
    
  • 함수

    반환 함수 사용
    void Close() 출력스트림을 닫는다. 닫기 전에 flushing하기
    void flush() 스트림을 비운다. 버퍼에 모인 데이터를 출력한다.
    void newLine() 개행역할
    void write(int c), write(String s, int offset, int length), write(Char[] cbuf, int offset, int length) 글자를 버퍼에 저장, 버퍼 offset위치부터 length크기만큼 글자 저장, 각각으로 저장된 글&숫자는 개행이 없어서 한줄로 이어지므로 필요하다면 각 저장시 “\n”을 추가해줘야한다.

참고


  • 자바의 정석

Tags:

Categories:

Updated:

Leave a comment