본문 바로가기

Programming Language/JAVA

[JAVA] BufferedReader, BufferedWriter

BufferedReader / BufferedWriter란?

BufferedReader와 BufferedWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수. 

 

버퍼를 사용하지 않은 입력은 키보드 입력이 키를 누르는 즉시 바로 프로그램에 전달된다.

버퍼를 사용하는 입력은 키보드 입력이 있을 때마다 한 문자씩 버퍼로 전송한다. 

버퍼가 가득 차거나 개행 문자가 나타나면 버퍼의 내용을 한번에 프로그램에 전달한다. 

 

둘다 기존의 Scanner와 System.out.println()보다 속도 측면에서 빠르기 때문에 많은 양의 데이터를 처리할 때 유리하다. 

 

 

BufferedReader / BufferedWriter 사용법

 

import

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

 

BufferedReader 사용법

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = br.readLine(); // String
int i = Integer.parseInt(br.readLine()); // Int

입력은 readLine()메소드를 사용한다.

 

※주의점

1. readLine()시 리턴값이 String으로 고정된다. String이 아닌 다른 타입으로 입력받으려면 형변환을 반드시 해줘야한다.

2. readLine()할 때마다 예외처리를 꼭 해줘야한다. 보통 try&catch 보다는 throwsIOExeption을 활용한다.

 

 

throw 이용 시

1) 클래스 import

import java.io.IOException;

2) main 클래스 옆에 throws IOExeption을 작성한다.

 

 

데이터 가공

import java.util.StringTokenizer;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()); 

int N = Integer.parseInt(st.nextToken()); //첫번째 호출
int M = Integer.parseInt(st.nextToken()); //두번째 호출


//s = br.readLine();
String arr[] = s.split(" ");

BufferedReader를 통해 읽어온 데이터는 개행문자 단위(Line 단위)로 나누어진다.

만약 이를 공백 단위로 데이터를 가공하고자 하면 따로 작업을 해줘야 한다. 

 

1번 방법: StringTokenizer의 nextToken() 함수를 쓰면 readLine()을 통해서 입력 받은 값을 공백 단위로 구분하여 순서대로 호출할 수 있다.

 

2번 방법: String.split() 함수를 사용하면 배열에 공백 단위로 끊어서 데이터를 저장하여 사용할 수 있다. 

 

 

 

BufferedWriter

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //선언
bw.write(s);
bw.newLine();//줄바꿈
bw.flush(); //데이터 모두 출력
bw.close();

write(): 버퍼에 씀. (화면에 출력되는 것이 아니다!, 화면에 출려갛는 역할은 flush가 수행한다.)

newLine(): 개행 문자 역할

flush(): 남아있는 데이터 모두 출력. 스트림을 비움.

close(): 스트림을 닫음. 닫기 전 flush();

 

 

※주의점

BufferedWriter의 write()메서드를 통해 버퍼에 Int형을 넣고 싶으면 String형으로 변환이 필요하다.!

형 변환 없이 write()한 후 flush()를 하면 다음과 같이 오류가 뜬다.

 

오류

 

 

공부한 내용으로 적은 백준 15552 문제 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
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());
			
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			
			bw.write(a+b+"");
			bw.newLine();					
		}	

			bw.flush();
			bw.close();		
	}
		
}

https://www.acmicpc.net/problem/15552

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

 

 


참고

https://dev-note-97.tistory.com/58

 

[Java] BufferedWriter Int형 출력 / BufferedWriter 정수 출력

더보기 BufferedWriter 사용시 정수를 그대로 출력하려고 할 경우 다음과 같은 오류가 발생합니다. import java.io.*; public class Main { public static void main(String[] args) throws IOException { Buffer..

dev-note-97.tistory.com

https://rlakuku-program.tistory.com/33

 

[Java] 빠른 입출력을 위한 BufferedReader, BufferedWriter, StringTokenizer, StringBuilder

BufferedReader / BufferedWriter BufferedReader와 BufferdWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수이다. 버퍼를 사용하지 않는 입력은, 키보드의 입력이 키를 누르는 즉시 바로 프로그램에 전달된다..

rlakuku-program.tistory.com

https://m.blog.naver.com/ka28/221850826909

 

[JAVA] BufferedReader 와 Bufferedwriter 사용법

BufferedReader :Scanner와 유사. Bufferedwriter :System.out.println();과 유사 둘은 모두 기존에 ...

blog.naver.com

https://velog.io/@jkh9615/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%EC%A4%80-15552-%EB%B9%A0%EB%A5%B8-AB-Java

 

[알고리즘] 백준 15552 빠른 A+B Java

문제 정보플랫폼 : 백준분류 : 수학난이도 : 브론즈2링크 : https://www.acmicpc.net/problem/15552풀이이후에 풀이할 내용중에서 BufferedReader와 BufferedWriter라는 것을 사용할 때가 있다. 목적부터 말하자면,

velog.io