JAVA

Java I/O: BufferedReader, BufferedWriter, Buffer 사용법

Stark97 2023. 11. 1. 21:26
반응형

스프링 부트를 통해 개발을 진행하다 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. 한 번에 여러 문자를 읽는다는 것의 의미

  1. 일반적인 읽기 방식
    • 파일이나 네트워크로부터 데이터를 읽을 때, 매번 한 문자씩 읽으면, 각 문자를 읽을 때마다 입출력 작업이 발생한다. 이렇게 되면, 입출력 작업의 오버헤드가 커져서 전체 작업이 느려질 수 있다.

  2. 버퍼를 사용한 읽기 방식
    • BufferedReader와 같은 클래스를 사용하면, 내부 버퍼에 한 번에 여러 문자를 읽어 올 수 있다.
    • 예를 들어, 버퍼의 크기가 1024바이트라면, 한 번의 입출력 작업으로 1024바이트의 데이터를 읽어 버퍼에 저장한다. 그 후, 프로그램은 버퍼에서 데이터를 읽어 처리하며, 버퍼가 비워질 때만 다시 입출력 작업을 수행한다.

5-3. 버퍼 사용의 장점

  • 효율성 증가
    • 한 번의 입출력 작업으로 여러 문자를 읽기 때문에, 입출력 작업의 횟수가 줄어들고 전체 작업 속도가 빨라진다.

  • 시스템 자원 절약
    • 입출력 작업은 상대적으로 느린 작업이므로, 횟수를 줄이면 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 동시성과 병렬 처리 가이드: 기초 이론과 필요성 (Part 1)

코딩은 글쓰기라고 생각한다. 꾸준히 기록하며 내 개발 실력을 키울것이다.

curiousjinan.tistory.com

 

 

반응형