반응형
버퍼를 사용하면 키보드의 입력값을 버퍼에 한번에 모았다가 , 버퍼의 내용을 한번에 전송하기 때문에
Scanner, System.out.println 보다 훨씬 빠르고 효율적이다.
버퍼 입출력
- 버퍼(buffer)
- 데이터를 한 곳에서 다른 한곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 임시 메모리 영역
- 입출력 속도 향상을 위해 버퍼 사용
- 버퍼 플러시(buffer flush)
- 버퍼에 남아 있는 데이터를 출력시킴(버퍼를 비우는 동작)
- BufferedReader
- 버퍼를 이용한 입력
- BufferedWriter
- 버퍼를 이용한 출력
BufferedReader
Java를 처음 접하시는 분들이 주로 받는 입력방식은 Scanner입니다. Scanner를 통해 입력을 받을경우 Space Enter를 모두 경계로 인식하기에 입력받은 데이터를 가공하기 매우 편리합니다. 하지만 그에비해 BufferedReader는 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기때문에 입력받은 데이터를 가공하는 작업이 필요할경우가 많습니다. Scanner에 비해 다소 사용하기 불편하죠. 하지만 많은 양의 데이터를 입력받을경우 BufferedReader를 통해 입력받는 것이 효율면에서 훨씬 낫습니다. 입력시 Buffer를 활용함으로써 작업속도 차이가 많이납니다.
BufferedReader 사용법
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader선언
String s = bf.readLine(); //String 문자열 받기
int i = Integer.parseInt(bf.readLine()); //Int
readLine()은 꼭! 예외처리를 해줘야 한다. readLine()을 할때마다 try&catch 를 사용해도 되지만,
대부분 throws IOException을 이용해 예외처리를 해준다.
데이터 가공
// 1번째 방법) StringTokenizer를 이용한다.
StringTokenizer st = new StringTokenizer(br.readLine()); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출을 to int
int b = Integer.parseInt(st.nextToken()); //두번째 호출을 to int
// 두번째 방법) string을 한번에 받아서 split을 이용해 배열로 변환
String s = br.readLine();
String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음
BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//선언
String s = br.readLine();//출력할 문자열
bw.write(s);//출력
bw.newLine(); //줄바꿈 -> 이게 잘 안된다. 개행을 할때에는 bw.write(s + "\n"); 처럼 사용한다.
bw.flush();//남아있는 데이터를 모두 출력시킴
bw.close();//스트림을 닫음
예시 Example
import java.io.*;
import java.util.StringTokenizer;
public class baekjoon_15552 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));//reader선언
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//writer선언
StringTokenizer st;//tokenizer 선언
int n = Integer.parseInt(bf.readLine()); // 반복횟수
for (int i=0; i<n; i++) {
st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int sum = a+b;
bw.write(sum + "\n");
}
bw.flush();
bw.close();
}
}
입력
5
1 1
12 34
5 500
40 60
1000 1000
출력
2
46
505
100
2000
반응형
반응형
버퍼를 사용하면 키보드의 입력값을 버퍼에 한번에 모았다가 , 버퍼의 내용을 한번에 전송하기 때문에
Scanner, System.out.println 보다 훨씬 빠르고 효율적이다.
버퍼 입출력
- 버퍼(buffer)
- 데이터를 한 곳에서 다른 한곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 임시 메모리 영역
- 입출력 속도 향상을 위해 버퍼 사용
- 버퍼 플러시(buffer flush)
- 버퍼에 남아 있는 데이터를 출력시킴(버퍼를 비우는 동작)
- BufferedReader
- 버퍼를 이용한 입력
- BufferedWriter
- 버퍼를 이용한 출력
BufferedReader
Java를 처음 접하시는 분들이 주로 받는 입력방식은 Scanner입니다. Scanner를 통해 입력을 받을경우 Space Enter를 모두 경계로 인식하기에 입력받은 데이터를 가공하기 매우 편리합니다. 하지만 그에비해 BufferedReader는 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기때문에 입력받은 데이터를 가공하는 작업이 필요할경우가 많습니다. Scanner에 비해 다소 사용하기 불편하죠. 하지만 많은 양의 데이터를 입력받을경우 BufferedReader를 통해 입력받는 것이 효율면에서 훨씬 낫습니다. 입력시 Buffer를 활용함으로써 작업속도 차이가 많이납니다.
BufferedReader 사용법
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader선언
String s = bf.readLine(); //String 문자열 받기
int i = Integer.parseInt(bf.readLine()); //Int
readLine()은 꼭! 예외처리를 해줘야 한다. readLine()을 할때마다 try&catch 를 사용해도 되지만,
대부분 throws IOException을 이용해 예외처리를 해준다.
데이터 가공
// 1번째 방법) StringTokenizer를 이용한다.
StringTokenizer st = new StringTokenizer(br.readLine()); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출을 to int
int b = Integer.parseInt(st.nextToken()); //두번째 호출을 to int
// 두번째 방법) string을 한번에 받아서 split을 이용해 배열로 변환
String s = br.readLine();
String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음
BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//선언
String s = br.readLine();//출력할 문자열
bw.write(s);//출력
bw.newLine(); //줄바꿈 -> 이게 잘 안된다. 개행을 할때에는 bw.write(s + "\n"); 처럼 사용한다.
bw.flush();//남아있는 데이터를 모두 출력시킴
bw.close();//스트림을 닫음
예시 Example
import java.io.*;
import java.util.StringTokenizer;
public class baekjoon_15552 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));//reader선언
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//writer선언
StringTokenizer st;//tokenizer 선언
int n = Integer.parseInt(bf.readLine()); // 반복횟수
for (int i=0; i<n; i++) {
st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int sum = a+b;
bw.write(sum + "\n");
}
bw.flush();
bw.close();
}
}
입력
5
1 1
12 34
5 500
40 60
1000 1000
출력
2
46
505
100
2000
반응형