BufferedReader & Bufferedwriter

라미·2024년 2월 21일

Java

목록 보기
3/3
post-thumbnail

BufferedReader / Bufferedwriter

Buffer를 통해 읽고 쓰는 함수
입출력 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후 전달된다
Scanner : Space, Enter 모두 경계로 인식 <-> BufferedReader : Enter만 경계로 인식

BufferedReader

Enter만 경계로 인식한다.
받은 데이터가 String로 고정되기 때문에 다른 타입으로 입력 받으려면 형변환 필요
입력시 Buffer를 활용함으로 작업속도가 빠르다

🐥 사용법

  import java.io.*;

  class BufferedReaderEx1 {
      public static void main(String[] args) {
          try {
              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

              // String
              String s = br.readLine();

              // int
              int num = Integer.parseInt(br.readLine());

              // 공백 구분 방법 1
              StringTokenizer st = new StringTokenizer(s); // StringTokenizer 인자 값에 입력 문자열이 들어감
              int a = Integer.parseInt(st.nextToken()); // 첫번째 호출
              int b = Integer.parseInt(st.nextToken()); // 두번째 호출

              // 공백 구분 방법 2
              String array [] = s.split(" "); // 공백마다 데이터 끊어서 배열에 넣음

              br.close(); // 입출력이 끝난 후 닫기
          } catch (IOException e) { // 예외처리 필수
              e.printStackTrace();
              System.out.println(e.getMessage());
          }
      }
  }

readLine(); : 데이터 단위 라인으로 읽기 가능 / 예외처리를 필수로 해줘야한다. 보통 throws IOException 을 통해 작업

BufferdWriter

한번에 모아뒀다가 출력이 가능
버퍼를 정의해줬기 때문에 반드시 flush()/close()를 호출뒤에 해줘야한다.
System.out.println() 처럼 자동개행 기능이 없기 때문에 개행이 필요하면 \n을 통해 따로 처리 해줘야 한다.

🐥 사용법

  BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //선언
  String s = "abcdefg"; //출력할 문자열
  bw.write(s); //출력
  bw.newLine(); //줄바꿈
  bw.flush(); //남아있는 데이터를 모두 출력시킴
  bw.close(); //스트림을 닫음

주요 메서드

메서드 명기능
BufferedReader(Reader rd)rd에 연결되는 문자입력 버퍼스트림 생성
BufferedWriter(Writer wt)wt에 연결되는 문자 출력 버퍼스트림 생성
int read()스트림으로부터 한 문자를 읽어서 int 형으로 리턴
int read(char[] buf)문자 배열 buf의 크기만큼 문자를 읽어들임. 읽어들인 문자 수를 리턴
int read(char[] buf, int offset, int length)buf 의 offset 위치에서부터 length 길이 만큼 문자를 스트림으로부터 읽어들임
String readLine()스트림으로부터 한 줄을 읽어 문자열로 리턴
void mark()현재 위치를 마킹, 차후 reset() 을 이용하여 마킹위치부터 시작함
void reset()마킹이 있으면 그 위치에서부터 다시 시작, 그렇지 않으면 처음부터 다시 시작
long skip(int n)n 개의 문자를 건너 뜀
void close()스트림 닫음
void write(int c)int 형으로 문자 데이터를 출력문자 스트림으로 출력
void write(String s, int offset, int length)문자열 s를 offset위치부터 length 길이 만큼을 출력스트림으로 출력
void write(char[] buf, int offset, int length)문자배열 buf의 offset 위치부터 length 길이 만큼을 출력스트림으로 출력
void newLine()줄바꿈 문자열 출력
void flush()남아 있는 데이터를 모두 출력시킴

백준 문제때문에 알게됐다!!!!

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st; // 공백 구분 위해서 토큰선언

        int t = Integer.parseInt(br.readLine()); // 총 개수 입력받기

        for (int i = 0; i < t; i++) {
            st = new StringTokenizer(br.readLine());
            bw.write("Case #" + (i + 1) + ": ");
            bw.write(String.valueOf(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())));
            bw.newLine();
        }
        br.close();
        bw.flush();
        bw.close();
    }
}

👍새로 알게 된 점

bw.write() 메서드는 String만 출력이 가능하다! 꼭꼭 문자열로 다시 변환해서 출력할것!

0개의 댓글