Scanner/ System.out.println 말고 BufferedReader/BufferedWriter 사용 !
Scanner/ System.out.println VS BufferedReader/BufferedWriter
<버퍼를 사용하지 않는 입력 : Scanner/ System.out.println >
- 키보드의 입력이 키를 누르는 즉시 프로그램으로 바로 전달됨
<버퍼를 사용하는 입력 :BufferedReader/BufferedWriter>
- 키보드의 입력이 있을 때마다 한 문자씩 버퍼로 전송함
- 버퍼가 가득 차거나, 개행 문자가 나타나면, 버퍼의 내용을 한 번에 전송함
버퍼에 모아뒀다가 한 번에 전송하는 게 효율적
☼ 버퍼(Buffer)
- 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 임시 메모리 영역
- 입출력 속도 향상을 위해 사용
☼ BufferedReader 사용방법
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int T = Integer.parseInt(br.readLine()); //BufferedReader 타입 고정 : String ➜ Integer.parselnt 통해 int 형 변환
for(int i=0;i<T;i++) {
st = new StringTokenizer(br.readLine()," "); //StringTokenizer 생성과 동시 문자 입력
int a = Integer.parseInt(st.nextToken()); //StringTokenzier 토큰을 반환되는 타입 : String ➜ Integer.parselnt 통해 int 형 변환
int b = Integer.parseInt(st.nextToken());
int sum = a+b;
bw.write(sum+"\n"); // 출력 스트림 출력
}
br.close();
bw.flush(); //버퍼 비우기
bw.close(); //버퍼 닫기
}
}
new InputStreamReader(System.in)
➜ 키보드에서 입력 받기 위해 표준 입력 스트림(System.in)과 InputStreamReader 스트림 객체 연결
BufferedReader br
➜ br에 연결되는 문자입력 버퍼스트림 생성
- 개행문자만 경계로 인식
- readLine() 메서드로 입력
- 입력 받은 데이터 String 고정
- 동기화되어 멀티스레드 환경에서 안전
- 예외 처리 필수 , readLine() 마다 try/catch문으로 감싸주거나 throws IOException을 통해 처리한다.