산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java BufferedInputStream 마스터하기: 효율적 바이트 읽기와 고급 메서드

Java BufferedInputStream 클래스 개요

이 튜토리얼은 Java BufferedInputStream 클래스, 핵심 메서드, 파일 I/O 성능을 향상시키는 실전 예제를 다룹니다.

java.io 패키지의 BufferedInputStream 클래스는 내부 버퍼를 추가하여 바이트 수준 입력 스트림을 향상시키고, 더 빠르고 효율적인 데이터 읽기를 가능하게 합니다.

추상 InputStream 클래스를 확장합니다.


BufferedInputStream 작동 원리

BufferedInputStream은 기본적으로 8,192바이트의 내부 버퍼를 유지합니다. 읽기 연산이 요청되면 기본 스트림(일반적으로 파일)에서 바이트 블록을 가져와 이 버퍼에 저장합니다. 이후 읽기 호출은 버퍼가 소진될 때까지 버퍼에서 바이트를 소비하며, 그 시점에 또 다른 블록이 로드됩니다. 이는 비용이 많이 드는 디스크 I/O를 줄이고 데이터 소비를 가속화합니다.


BufferedInputStream 생성하기

BufferedInputStream을 생성하려면 먼저 클래스를 임포트합니다:

import java.io.BufferedInputStream;
import java.io.FileInputStream;

그런 다음 FileInputStream 같은 하위 수준 스트림을 래핑하여 인스턴스화합니다:

FileInputStream file = new FileInputStream("example.txt");
BufferedInputStream buffer = new BufferedInputStream(file);

선택적으로 커스텀 버퍼 크기를 지정할 수 있습니다:

int bufferSize = 16_384; // 16 KB
BufferedInputStream buffer = new BufferedInputStream(file, bufferSize);

버퍼가 클수록 디스크 접근 횟수가 줄어듭니다. 큰 파일이나 네트워크 스트림에 유용합니다.


BufferedInputStream의 핵심 메서드

read()

예제: 텍스트 파일을 바이트 단위로 읽어 콘솔에 출력.

import java.io.BufferedInputStream;
import java.io.FileInputStream;

public class Main {
    public static void main(String[] args) {
        try (BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt"))) {
            int byteRead;
            while ((byteRead = in.read()) != -1) {
                System.out.print((char) byteRead);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

출력:

This is a line of text inside the file.

available()

available() 메서드는 블로킹 없이 스트림에서 읽을 수 있는 바이트 수를 보고합니다. 큰 스트림 처리 시 진행 상황을 파악하는 데 도움이 됩니다.

FileInputStream file = new FileInputStream("input.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
System.out.println("Bytes available: " + buffer.available());
// ... 데이터 읽기
System.out.println("Bytes remaining: " + buffer.available());
buffer.close();

skip(long n)

지정된 바이트 수를 건너뛰려면 skip()을 사용합니다. 실제 건너뛴 바이트 수를 반환하며, 스트림 끝에 도달하면 요청보다 적을 수 있습니다.

buffer.skip(5); // 처음 5바이트 건너뛰기

close()

스트림을 닫아(가급적 try-with-resources 블록 사용) 시스템 자원을 해제합니다. 닫은 후에는 스트림을 재사용할 수 없습니다.


기타 주목할 만한 메서드

메서드설명
mark(int readLimit)스트림의 현재 위치를 표시합니다. 이후 reset() 호출은 readLimit 바이트 이상 읽지 않은 경우 이 지점으로 돌아갑니다.
reset()스트림을 마지막 표시 위치로 재배치합니다.

완전한 레퍼런스는 공식 Java 문서를 참조하세요.

java

  1. Java final 키워드 마스터: 변수, 메서드, 클래스에서의 활용
  2. Java instanceof 연산자 완벽 가이드: 기본 사용법부터 상속, 인터페이스까지
  3. Java 정적 중첩 클래스 이해: 용법, 내부 클래스와의 차이, 예제
  4. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  5. Java 싱글톤 패턴 완벽 가이드: 안전하게 구현하고 사용하기
  6. Java 리플렉션 마스터: 런타임에 클래스, 메서드, 필드 검사 및 조작
  7. Java ObjectOutputStream 마스터하기: 직렬화, 메서드, 실전 예제
  8. Java BufferedReader 마스터하기: 효율적 캐릭터 스트림 처리
  9. Java 제네릭 마스터하기: 재사용 가능하고 타입 안전한 코드 작성
  10. java.io로 Java 파일 작업 마스터하기 – 생성, 읽기, 쓰기 및 삭제