[Java] BufferedReader / Bufferedwriter
BufferedReader / Bufferedwriter
BufferedReader 와 Bufferedwriter 클래스는 Java에서 입출력 성능을 향상시키기 위해 사용되는 클래스이다.
이들 클래스는 기본적으로 Reader 및 Writer 클래스를 감싸고 있어서, 버퍼링된 입출력을 제공하여 성능을 최적화 한다.
BufferedReader
문자 기반 입력 스트림에 대한 버퍼링을 제공한다.
특히, readLine() 메서드를 사용하여 한 줄씩 데이터를 읽을 수 있다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언
String s = br.readLine();
int i = Integer.parseInt(br.readLine());
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
아래는 BufferedReader에서 사용되는 메서드들이다.
read()
int read() throws IOException
: 한 문자를 읽어 반환한다. 파일의 끝에 도달하면 -1을 반환한다.
read(char[] cbuf)
int read(char[] cbuf) throws IOException
: 문자 배열에 데이터를 읽어 온다.
읽은 문자의 수를 반환하며, 파일의 끝에 도달하면 -1을 반환한다.
readLine()
String readLine() throws IOException
: 한 줄의 문자열을 읽어 반환한다.
파일의 끝에 도달하면 null
을 반환한다.
skip(long n)
long skip(long n) throws IOException
: 입력 스트림에서 n개의 문자를 건너뛴다.
BufferedWriter
문자 기반 출력 스트림에 대한 버퍼링을 제공한다.
특히 write() 메서드를 사용하여 데이터를 버퍼에 쓰고
flush() 메서드를 호출하여 실제 출력 스트림으로 데이터를 내보낼 수 있다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언
String str = "abcdef"; // 출력할 문자열
bw.write(s); // 출력
bw.newLine(); // 줄바꿈
bw.flush(); // 남아있는 데이터 모두 출력
bw.close();
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterExample {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("Hello, BufferedWriter!");
writer.newLine(); // 개행 추가
writer.write("Another line.");
// writer.flush(); // 실제 출력으로 데이터를 내보내기 위해 flush() 호출 (try-with-resources를 사용하면 자동으로 수행됨)
} catch (IOException e) {
e.printStackTrace();
}
}
}
아래는 BufferedWriter에서 사용되는 메서드들이다.
write(int c)
void write(int c) throws IOException
: 주어진 정수 c
에 해당하는 문자를 출력 스트림에 보낸다.
write(char[] cbuf)
void write(char[] cbuf) throws IOException
: 문자 배열 cbuf
의 모든 내용을 출력 스트림에 보낸다.
write(String str)
void write(String str) throws IOException
: 문자열 str
을 출력 스트림에 보낸다.
newLine()
void newLine() throws IOException
: 새로운 라인을 출력 스트림에 보낸다.
flush()
void flush() throws IOException
: 버퍼의 내용을 출력 스트림에 보낸다.
close()
void close() throws IOException
: 출력 스트림을 닫고 사용한 시스템 자원을 해제한다.
Scanner와 차이점
BufferedReader와 Scanner는 둘 다 Java의 입력 스트림을 처리하는 클래스이다.
BufferedReader
특징
- 버퍼를 이용하여 효율적인 입출력을 지원한다.
- 문자 단위로 읽어오며, 속도가 빠르다.
- readLine() 메서드를 이용해 한 줄씩 읽을 수 있다.
장점
- 대용량 데이터를 효율적으로 처리할 수 있다.
- 입출력 속도가 빠르며, 문자열을 직접 처리할 때 효과적이다.
단점
- 기본적으로 다른 자료형을 읽어올 때 형 변환을 해주어야 한다.
사용 시나리오
- 대용량의 텍스트 데이터를 빠르게 처리해야 할 때
- 문자열을 직접 처리하는 경우
Scanner
특징
- 토큰 기반으로 입력을 파싱한다.
- 다양한 자료형(정수, 실수 등)을 쉽게 읽을 수 있다.
- 공백이나 개행 문자를 기준으로 입력을 읽는다.
장점
- 간편하게 다양한 자료형을 읽을 수 있다.
- 특정 패턴이나 구조가 있는 데이터를 처리할 때 유용하다.
단점
- 버퍼를 사용하지 않아 입출력 속도가 느릴 수 있다.
- 대용량 데이터를 처리할 때 효율이 떨어질 수 있다.
사용 시나리오
- 입력이 간단하고 다양한 자료형을 처리해야 할 때
- 공백이나 개행 문자를 기준으로 데이터를 읽을 때
정리
Scanner는 사용자 편의성을 강조하며, 간단한 입력 처리에 유용하다.
간단하게 입력을 처리하거나 다양한 자료형을 읽어야 할 때는 Scanner를 사용하는 것이 좋다.
BufferedReader는 성능과 대용량 데이터 처리에 강점이 있다.
다만, 좀 더 복잡한 데이터 파싱이 필요하다.
대용량 데이터 처리 ⇒ BufferedReader가 효율적이다.
간단하고 다양한 자료형 처리 ⇒ Scanner가 간편하다.
입출력 속도가 중요한 경우 ⇒ BufferedReader가 빠르다.
문자열을 직접 처리할 때 ⇒ BufferedReader가 효과적이다.
댓글남기기