반응형
스프링 부트를 통해 개발을 진행하다 I/O작업에서 주로 사용되는 BufferedReader, BufferedWriter에 대한 궁금증이 생겼다. 이에 이번에는 이것들에 대해서 알아봤다.
BufferedReader와 BufferedWriter는 자바(Java) 프로그래밍 언어에서 입출력(I/O) 작업을 효율적으로 수행하기 위해 사용되는 클래스이다.
이 클래스들은 버퍼를 사용하여 데이터를 읽고 쓰는 작업을 최적화한다.
1. BufferedReader
1-1. BufferedReader란?
- BufferedReader는 텍스트 파일이나 입력 스트림에서 문자를 읽을 때 사용된다.
- 이 클래스는 내부 버퍼를 사용하여 한 번에 여러 문자를 읽어 들이므로, 매번 디스크나 네트워크에서 직접 읽는 것보다 훨씬 빠르다.
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
2. BufferedWriter
2-1. BufferdWriter
- BufferedWriter는 텍스트 파일이나 출력 스트림에 문자를 쓸 때 사용된다.
- BufferedReader와 마찬가지로 내부 버퍼를 사용하여 한 번에 여러 문자를 쓸 수 있으므로, 매번 디스크나 네트워크에 직접 쓰는 것보다 훨씬 빠르다.
try (BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt"))) {
writer.write("Hello, World!");
writer.newLine();
} catch (IOException e) {
e.printStackTrace();
}
3. BufferedReader, BufferedWriter의 장점
3-1. 효율성
- 버퍼를 사용하므로 작은 단위로 여러 번 디스크나 네트워크에 액세스 하는 것보다 훨씬 빠르게 데이터를 읽고 쓸 수 있다.
3-2. 사용 편의성
- BufferedReader는 readLine 메서드를 통해 한 줄씩 읽는 기능을 제공하며, BufferedWriter는 newLine 메서드를 통해 줄 바꿈을 쉽게 처리할 수 있다.
4. BufferedReader, BufferedWriter 요약
4-1. 내용 요약
- BufferedReader와 BufferedWriter는 자바에서 텍스트 데이터의 입출력을 효율적으로 처리하기 위한 클래스로, 내부 버퍼를 사용하여 성능을 향상시킨다. 이 클래스들은 파일 작업이나 네트워크 통신과 같은 다양한 상황에서 유용하게 사용될 수 있다.
5. 버퍼(Buffer)란?
5-1. 버퍼(Buffer)
- 버퍼는 일시적으로 데이터를 저장하는 메모리 영역이다. 데이터를 읽거나 쓸 때, 한 번에 작은 단위로 처리하는 것보다 큰 단위로 처리하는 것이 효율적일 수 있다. 버퍼는 이런 작업을 가능하게 해준다.
5-2. 한 번에 여러 문자를 읽는다는 것의 의미
- 일반적인 읽기 방식
- 파일이나 네트워크로부터 데이터를 읽을 때, 매번 한 문자씩 읽으면, 각 문자를 읽을 때마다 입출력 작업이 발생한다. 이렇게 되면, 입출력 작업의 오버헤드가 커져서 전체 작업이 느려질 수 있다.
- 파일이나 네트워크로부터 데이터를 읽을 때, 매번 한 문자씩 읽으면, 각 문자를 읽을 때마다 입출력 작업이 발생한다. 이렇게 되면, 입출력 작업의 오버헤드가 커져서 전체 작업이 느려질 수 있다.
- 버퍼를 사용한 읽기 방식
- BufferedReader와 같은 클래스를 사용하면, 내부 버퍼에 한 번에 여러 문자를 읽어 올 수 있다.
- 예를 들어, 버퍼의 크기가 1024바이트라면, 한 번의 입출력 작업으로 1024바이트의 데이터를 읽어 버퍼에 저장한다. 그 후, 프로그램은 버퍼에서 데이터를 읽어 처리하며, 버퍼가 비워질 때만 다시 입출력 작업을 수행한다.
5-3. 버퍼 사용의 장점
- 효율성 증가
- 한 번의 입출력 작업으로 여러 문자를 읽기 때문에, 입출력 작업의 횟수가 줄어들고 전체 작업 속도가 빨라진다.
- 한 번의 입출력 작업으로 여러 문자를 읽기 때문에, 입출력 작업의 횟수가 줄어들고 전체 작업 속도가 빨라진다.
- 시스템 자원 절약
- 입출력 작업은 상대적으로 느린 작업이므로, 횟수를 줄이면 CPU와 메모리 등의 자원을 효율적으로 사용할 수 있다.
- 입출력 작업은 상대적으로 느린 작업이므로, 횟수를 줄이면 CPU와 메모리 등의 자원을 효율적으로 사용할 수 있다.
5-4. 요약
- 내부 버퍼를 사용하여 한 번에 여러 문자를 읽는 것은 입출력 작업의 효율성을 높이는 방법이다.
- 한 번의 작업으로 많은 양의 데이터를 읽어 버퍼에 저장하고, 필요할 때마다 버퍼에서 데이터를 가져와 처리함으로써, 전체 작업 속도를 향상시키고 시스템 자원을 절약할 수 있다.
6. 버퍼(Buffer)는 주로 언제 사용될까?
6-1. 버퍼의 사용
- 버퍼를 사용하는 방식은 컴퓨팅의 많은 분야에서 활용된다. 특히 자바에서는 다음과 같은 상황에서 주로 사용된다.
6-2. 파일 입출력
- 파일에서 데이터를 읽거나 파일에 데이터를 쓸 때, BufferedReader와 BufferedWriter와 같은 버퍼링 클래스를 사용하면 효율성을 크게 향상시킬 수 있다. 큰 파일을 처리할 때 특히 유용하다.
6-3. 네트워크 통신
- 네트워크로 데이터를 전송하거나 받을 때도 버퍼링이 사용된다. BufferedInputStream과 BufferedOutputStream과 같은 클래스를 사용하면 네트워크 통신의 성능을 향상시킬 수 있다.
6-4. 데이터베이스 연결
- 데이터베이스와의 통신에서도 버퍼링이 사용될 수 있으며, 대량의 데이터를 효율적으로 처리할 수 있게 해 준다.
6-5. ObjectMapper와의 관련성
- ObjectMapper는 자바에서 JSON 라이브러리인 Jackson의 핵심 클래스로, 자바 객체와 JSON 간의 변환을 담당한다.
- 버퍼링 자체와는 직접적인 관련이 없지만, ObjectMapper를 사용하여 큰 JSON 파일을 읽고 쓸 때 내부적으로 버퍼링이 사용될 수 있다. 이렇게 하면 JSON 데이터의 처리 성능을 향상시킬 수 있다.
6-6. 요약
- 버퍼를 사용하는 방식은 자바에서 파일 입출력, 네트워크 통신, 데이터베이스 연결 등 다양한 분야에서 활용된다.
- 이러한 기술은 데이터 처리의 효율성과 성능을 향상시키는 데 중요한 역할을 하며, ObjectMapper와 같은 라이브러리에서도 내부적으로 활용될 수 있다.
2023.10.31 - [JAVA] - Java 동시성과 병렬 처리 가이드: 기초 이론과 필요성 (Part 1)
반응형
'JAVA' 카테고리의 다른 글
[Java] 자바 리플렉션(reflection)이란? (1) | 2023.11.15 |
---|---|
[Java] 추상화란 무엇인가? (1) | 2023.11.02 |
[Java] 동시성과 병렬 처리 part2: 함정, 고급 패턴, 성능 최적화 (1) | 2023.11.01 |
[Java] 동시성과 병렬 처리 part1 (1) | 2023.10.31 |
[Java] Stream: mapToInt 함수로 점수 합산하기 (0) | 2023.09.27 |