꾸준히

[Java] BufferedReader, BufferedWriter 본문

공부/Java

[Java] BufferedReader, BufferedWriter

Jii- 2023. 11. 26. 18:00

버퍼

버퍼를 사용하는 입력은 키보드의 입력이 있을 때마다 한 문자씩 버퍼로 전송한다. 이후, 버퍼가 가득 차거나 개행 문자가 나타나면 버퍼의 내용을 한 번에 프로그램에 전달한다. 반면, 버퍼를 사용하지 않는 입력은 키보드의 입력이 키를 누르는 즉시 프로그램에 전달된다. 

 

키보드의 입력이 있을 때마다 바로 이동시키는 것보다 중간 버퍼를 사용하여 한번에 내용을 보내는 것이 더 효율적이다. 

 

Scanner

Scanner는 띄어쓰기(Enter)와 개행문자(SpaceEnter)를 경계로 입력 값을 인식하여 입력한 데이터를 가공해주기 때문에 사용이 편리하다. 하지만 버퍼 사이즈가 1024 char이기 때문에 많은 입력을 필요로 할 경우에는 성능적 측면에서 좋지 않다. 

 

BufferedReader

BufferedReader는 버퍼를 사용하여 입력을 받는다. Scanner와 달리 개행문자(SpaceEnter)를 경계로만 인식하고 입력받은 데이터가 String으로 고정되어 데이터를 필요에 따라 가공해줘야 한다. 하지만 Scanner에 비해 속도가 빠르다는 장점을 지닌다. 또한, 버퍼 사이즈가 8192 char 이기 때문에 입력 양이 유리하다. 

 

BufferedWriter

System.out.print 메서드와 같은 기능을 하는 메서드이다. BufferedWriter 역시 BufferedReader와 마찬가지로 버퍼를 이용하기 때문에 효율이 좋고 출력 양이 많을 때 유리하다.

 

BufferedReader 사용법 예시

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public void Main {
	public static void main(String args[]) throws IOException {
    	// BufferedReader 선언
    	BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

	// readLine 메서드의 리턴 값은 String
        String s = bf.readLine();
        
        // 공백 단위로 데이터를 가공하기 위한 작업 - 1. StringTokenizer
        StringTokenizer st = StringTokenizer(s);
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        
        // 공백 단위로 데이터를 가공하기 위한 작업 - 2. split 함수
        String array[] = s.split(" ");
	}
}

 

BufferedWriter 사용법 예시

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

public class Main {
	public static void main(String args[]) {
    	// 선언
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        String s = "hello wrold";
        
 		/*
        *  BufferedWriter의 write 메서드에는 System.out.println 메서드처럼 자동개행기능이 없으므로 
        * "\n"을 따로 처리해줘야 함. 
        */
        bw.write(s + "\n");
        // 남아있는 데이터 모두 출력
        bw.flush();
        // 스트림 닫기
      	bw.close();
	}
}

'공부 > Java' 카테고리의 다른 글

[Java] StringTokenizer  (0) 2023.11.26