[Java]BufferedReader와 BufferedWriter

김피자·2023년 1월 2일
0

자바

목록 보기
2/9

Buffer

: 데이터를 보관하는 임시 메모리 영역
: 입, 출력 속도 향상

BufferedReader

: 버퍼를 이용한 입력

BufferedWriter

: 버퍼를 이용한 출력

왜 사용할까?

: 원래 외부 장치의 데이터 입, 출력은 시간이 걸리는 작업이다.
키보드가 눌릴 때마다 입력한 문자 정보를 이동시키는 것 보다 중간에 버퍼를 두어 데이터를 묶어서 이동하는 것이 효율적이고 빠르다.
ex) 쓰레기가 생길 때마다 가서 버리는 것 보다 쓰레기통에 모았다가 한번에 버리는 것이 더 효율적

저는 걍 Scanner 쓸래요ㅠㅠ

: Scanner는 Space, Enter를 모두 경계로 인식해줘 입력받은 데이터를 사용하기에 편하다.
(실제로 알고리즘 문제 풀다보면 .split안해도 걍 알아서 공백을 인식해 값을 찹찹 넣어줌)
하지만, BufferReader은 Enter만 경계로 인식하고 입력 데이터도 String으로 고정되기 때문에 가공하는 작업이 많이 필요하다.

하지만, 많은 양의 데이터를 입력 받을 경우 BufferReader로 입력받는 것이 더 효율적이다.

BufferedReader 사용법

BufferedReader은 선언 후, readLine() 메소드를 이용해 데이터를 라인단위로 읽어오기
readLine()의 리턴 값은 String이라 다른 타입으로 입력 받으려면 형 변환이 필요하다!

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//문자
String str = br.readLine();
//숫자
int num = Integer.parseInt(br.readLine());

예외처리가 꼭 필요하다

  1. throws IOException
public class Main{
	public static void main(String[] args) throws IOException{
    }
}
  1. try ~ catch
public class Main{
	public static void main(String[] args) {
    try{
    }
    catch (IOException e){
    	e.printStackTrace();
        System.out.println(e.getMessage());
    }
    }
}

Read한 데이터는 Line단위로 이뤄져 공백 단위로 데이터를 가공하려면 따로 또 작업을 해줘야함

가공하는 방법

  1. StringTokenizer의 nextToken()
    : readLine()을 통해 입력받은 값을 공백 단위로 구분해 nextToken()을 통해 순서대로 호출할 수 있다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

StringTokenizer st = new StringTokenizer(br.readLine());

int num1 = Integer.parseInt(st.nextToken());
int num2 = Integer.parseInt(st.nextToken());
  1. 공백 단위로 끊어 배열에 넣어 사용
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();

String [] arr = str.split(" ");

BufferedWriter

: System.out.println처럼 데이터를 출력하는 함수
많은 양을 출력할 때 Buffer를 활용하기 때문에 효율적이다.

버퍼 공간을 잡아 놓았기 때문에 반드시 flush();를 통해 남은 데이터를 다 출력하고
close()를 통해 스트림을 닫아야한다.
println처럼 자동 개행이 없어 개행을 하려면 \n을 작성해야함

BufferWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = "hello"; 
bw.write(str + "\n"); // 출력
bw.flush();
bw.close();

결론

: 너무 어려워요

profile
제로부터시작하는코딩생활

0개의 댓글