■ BufferedReader / BufferedWriter
- Buffer에 입력데이터를 모아서 한번에 전달하기 때문에 속도,효율성 측면에서 성능이 좋다.
- 백준 알고리즘 2741번 문제를 Scanner와 BufferedReader로 코딩시 Scanner(696ms) / BufferedReader(192ms)
■ BufferedReader
import java.io.*;
public class Main {
// BufferedReader 사용 시 예외처리 필수!
public static void main(String[] args) throws Exception {
// 콘솔 입력 시 BufferedReader 객체 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// readLine() 매서드 리턴값은 String이어서 숫자 입력시 형변환 필수!
int N = Integer.parseInt(br.readLine());
String line = "";
// 더 이상 입력값이 없을 때까지 1줄씩 읽는다.
for(int i=0; (line=br.readLine()) !== null; i++;) {
System.out.println(line);
}
}
}
- readLine() 시 한 줄 단위로 데이터를 읽기 때문에 공백 단위로 데이터를 읽기 위해서는 StringTokenizer 객체나
String의 split 매서드를 사용하여야 한다.
■ BufferedReader 매서드
- (void) close() : 입력스트림을 닫는다.(Closes the stream and releases any system resources associated with it.)
- (void) mark() : 스트림의 현재 위치를 마킹합니다.(Marks the present position in the system.)
- (boolean) markSupported() : 스트림이 mark 기능을 지원하는지 true/false로 알려줍니다.
(Tells whether this stream supports the mark() operation, which it does.)
- (int) read() : 한 글자만 읽어 정수형으로 반환.(Reads a single character.)
- (int) read(char[] cbuf, int offset, int length) : cbuf의 offset위치부터 length만큼 문자를 읽어옵니다.
(Reads characters into a portion of an array.)
- (String) readLine() : 한 줄을 읽어 String으로 반환.(Reads a line of text.)
- (boolean) ready() : 입력스트림이 사용할 준비가 되어있는지 확인.
(Tells whether this stream is ready to be read.)
- (void) reset() : 마킹이 있으면 그 위치부터 다시 시작, 그렇지 않으면 처음부터 다시 시작합니다.
(Resets the stream to the most recent mark.)
- (long) skip(long n) : n개의 문자를 건너뜁니다. (Skips characters.)
■ BufferedWriter
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// 콘솔에 출력
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("hello\n"); // 버퍼에 쓰기
bw.newLine(); // 개행(줄바꿈)
bw.write("I am writing\n");
bw.flush(); // 버퍼 비우기(버퍼에 저장된 데이터는 출력)
bw.close();
}
}
■ BufferedWriter 매서드
- (void) close() : 스트림을 닫습니다. 닫기 전에 flushing 필수.(Closes the stream, flushing it first.)
- (void) flush() : 스트림을 비웁니다.(Flushes the stream.)
- (void) newLine() : 개행문자 쓰기.(Writes a line separator.)
- (void) write(char[] cbuf, int offset, int length) : 버퍼 offset위치부터 length크기만큼 write 씁니다.
- (void) write(int c) : 한 글자 쓰기.(Writes a single character.)
- (void) write(String s, int offset, int length) : 문자열에서 offset부터 일정 길이만큼 쓰기.
(Writes a portion of a String.)