Buffer를 통해 읽고 쓰는 함수
입출력 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후 전달된다
Scanner : Space, Enter 모두 경계로 인식 <-> BufferedReader : Enter만 경계로 인식
Enter만 경계로 인식한다.
받은 데이터가 String로 고정되기 때문에 다른 타입으로 입력 받으려면 형변환 필요
입력시 Buffer를 활용함으로 작업속도가 빠르다
🐥 사용법
import java.io.*;
class BufferedReaderEx1 {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// String
String s = br.readLine();
// int
int num = Integer.parseInt(br.readLine());
// 공백 구분 방법 1
StringTokenizer st = new StringTokenizer(s); // StringTokenizer 인자 값에 입력 문자열이 들어감
int a = Integer.parseInt(st.nextToken()); // 첫번째 호출
int b = Integer.parseInt(st.nextToken()); // 두번째 호출
// 공백 구분 방법 2
String array [] = s.split(" "); // 공백마다 데이터 끊어서 배열에 넣음
br.close(); // 입출력이 끝난 후 닫기
} catch (IOException e) { // 예외처리 필수
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
readLine(); : 데이터 단위 라인으로 읽기 가능 / 예외처리를 필수로 해줘야한다. 보통 throws IOException 을 통해 작업
한번에 모아뒀다가 출력이 가능
버퍼를 정의해줬기 때문에 반드시 flush()/close()를 호출뒤에 해줘야한다.
System.out.println() 처럼 자동개행 기능이 없기 때문에 개행이 필요하면 \n을 통해 따로 처리 해줘야 한다.
🐥 사용법
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //선언
String s = "abcdefg"; //출력할 문자열
bw.write(s); //출력
bw.newLine(); //줄바꿈
bw.flush(); //남아있는 데이터를 모두 출력시킴
bw.close(); //스트림을 닫음
| 메서드 명 | 기능 |
|---|---|
| BufferedReader(Reader rd) | rd에 연결되는 문자입력 버퍼스트림 생성 |
| BufferedWriter(Writer wt) | wt에 연결되는 문자 출력 버퍼스트림 생성 |
| int read() | 스트림으로부터 한 문자를 읽어서 int 형으로 리턴 |
| int read(char[] buf) | 문자 배열 buf의 크기만큼 문자를 읽어들임. 읽어들인 문자 수를 리턴 |
| int read(char[] buf, int offset, int length) | buf 의 offset 위치에서부터 length 길이 만큼 문자를 스트림으로부터 읽어들임 |
| String readLine() | 스트림으로부터 한 줄을 읽어 문자열로 리턴 |
| void mark() | 현재 위치를 마킹, 차후 reset() 을 이용하여 마킹위치부터 시작함 |
| void reset() | 마킹이 있으면 그 위치에서부터 다시 시작, 그렇지 않으면 처음부터 다시 시작 |
| long skip(int n) | n 개의 문자를 건너 뜀 |
| void close() | 스트림 닫음 |
| void write(int c) | int 형으로 문자 데이터를 출력문자 스트림으로 출력 |
| void write(String s, int offset, int length) | 문자열 s를 offset위치부터 length 길이 만큼을 출력스트림으로 출력 |
| void write(char[] buf, int offset, int length) | 문자배열 buf의 offset 위치부터 length 길이 만큼을 출력스트림으로 출력 |
| void newLine() | 줄바꿈 문자열 출력 |
| void flush() | 남아 있는 데이터를 모두 출력시킴 |
백준 문제때문에 알게됐다!!!!
import java.io.*;
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());
bw.write("Case #" + (i + 1) + ": ");
bw.write(String.valueOf(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())));
bw.newLine();
}
br.close();
bw.flush();
bw.close();
}
}
👍새로 알게 된 점
bw.write() 메서드는 String만 출력이 가능하다! 꼭꼭 문자열로 다시 변환해서 출력할것!