[자바] BufferedReader/Writer

Nux·2022년 8월 22일
0
post-thumbnail

백준 15552번

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(bf.readLine());
        for(int i = 0; i < n; i++){
            String s = bf.readLine();
            int a = Integer.parseInt(s.split(" ")[0]);
            int b = Integer.parseInt(s.split(" ")[1]);
            bw.write(a+b+"\n");
        }
        bw.flush();
    }
}

Stream

  • 자바에서는 모든 입출력이 Stream을 통해서 이루어짐
  • 스트림은 Byte형태로 데이터가 운반되는 연결통로
  • 큐 구조(FIFO)

InputStream(Reader)/OutputStream(Writer)

  • InputStream으로 Stream을 한 줄 씩 읽고, OutputStream으로 데이터를 내보낸 후 해당 공간을 비움
  • 많은 값을 입력해도 하나의 값만 입/출력 가능
  • 기본형은 int, 다른 타입은 형변환 필요

InputStreamReader/OutputStreamReader

  • 배열을 이용해 입/출력 하므로 하나 이상의 값을 다룰 수 있음
  • 고정 값만 다룰 수 있으므로 배열의 크기 이상의 값은 받을 수 없음
InputStream in = System.in;
InputStreamReader reader = new InputStreamReader(in);
		
OutputStream out = System.out;
OutputStreamWriter writer = new OutputStreamWriter(out);
		
char arr[] = new char[2];
// 크기 2인 배열 생성
// 많은 값을 입력해도 두개의 값만 출력 가능함
reader.read(arr);
// 값을 입력

int IcData = arr[0]-'0'; // 첫번째 값을 int로 형변환
		
writer.write(arr); // stream에 넣어둠
writer.write(IcData); // stream에 넣어둠
		
writer.flush(); // 입력받은 값을 한번에 출력함
writer.close();

BufferedReader/Writer

  • 버퍼를 이용해 읽고 쓰는 함수
  • 가변적인 값 처리 가능
  • 메모리 버퍼가 입력받은 값을 저장해두었다가 버퍼가 가득차거나 개행 문자를 마주하면 내용을 한번에 전송
    • Scanner & System.out.print로 입력 즉시 전송하게 되면 속도가 상대적으로 느려짐

특징

  • IOException 예외처리 필수
  • 입력 받은 데이터가 String으로 반환됨
  • split으로 값을 나눠주어야함
    • 1,2,3을 각각 입력하면 "1 2 3"이라는 문자열로 받게 됨

관련메서드

출처 https://altongmon.tistory.com/288

--

참고
https://terianp.tistory.com/19
https://jhnyang.tistory.com/92

0개의 댓글