Java InputStream 클래스: 핵심 메서드와 FileInputStream 실전 예제
Java InputStream 클래스
이 튜토리얼은 Java의 InputStream 클래스를 해설하며, 주요 메서드, 핵심 서브클래스, FileInputStream을 활용한 실전 예제를 다룹니다.
java.io 패키지에서 InputStream은 바이트 지향 입력 스트림을 나타내는 추상 슈퍼클래스입니다. 직접 인스턴스화할 수는 없지만, 구체적인 서브클래스들이 파일, 바이트 배열, 기타 소스에서 데이터를 읽는 강력한 메커니즘을 제공합니다.
InputStream의 주요 서브클래스
InputStream의 실질적 사용은 서브클래스에 의존합니다. 가장 일반적인 것들은 다음과 같습니다:
FileInputStream - 디스크의 파일에서 바이트를 읽습니다.
ByteArrayInputStream - 메모리 내 바이트 배열에서 바이트를 읽습니다.
ObjectInputStream - 입력 스트림에서 객체를 역직렬화합니다.
각 서브클래스는 별도 튜토리얼에서 다루겠지만, 여기서는 FileInputStream에 집중하겠습니다.
InputStream 생성하기
InputStream을 생성하려면 먼저 클래스를 임포트합니다:
import java.io.InputStream;
InputStream은 추상 클래스이므로 구체적인 서브클래스를 인스턴스화해야 합니다. 예를 들어:
InputStream stream = new FileInputStream("example.txt");
FileInputStream을 다른 구체적인 서브클래스로 대체할 수 있습니다.
InputStream의 핵심 메서드
다음 메서드들은 모든 InputStream 구현체에서 공통적으로 사용됩니다:
int read() - 단일 바이트를 읽어 int로 반환하거나, 스트림 끝에 도달하면 -1을 반환합니다.
int read(byte[] b) - 제공된 바이트 배열을 데이터로 채우고 읽은 바이트 수를 반환합니다.
int available() - 블로킹 없이 읽을 수 있는 바이트 수를 보고합니다.
void mark(int readlimit) - 스트림의 현재 위치를 표시하여 나중에 재설정할 수 있게 합니다.
void reset() - 스트림을 가장 최근 표시 위치로 되돌립니다.
boolean markSupported() - mark와 reset 지원 여부를 나타냅니다.
long skip(long n) - n 바이트의 입력을 건너뛰고 버립니다.
void close() - 스트림을 닫고 시스템 자원을 해제합니다.
실전 예제: FileInputStream으로 파일 읽기
input.txt라는 텍스트 파일에 다음 내용이 있다고 가정합니다:
This is a line of text inside the file.
아래는 파일을 열고 사용 가능한 바이트 수를 보고하고, 내용을 바이트 배열로 읽어 출력하는 완전한 Java 프로그램입니다.
import java.io.FileInputStream;
import java.io.InputStream;
public class Main {
public static void main(String[] args) {
byte[] buffer = new byte[100];
try (InputStream input = new FileInputStream("input.txt")) {
System.out.println("Available bytes: " + input.available());
int bytesRead = input.read(buffer);
System.out.println("Bytes read: " + bytesRead);
String data = new String(buffer, 0, bytesRead);
System.out.println("Data read from the file:");
System.out.println(data);
} catch (Exception e) {
e.printStackTrace();
}
}
}
실행 결과
Available bytes: 39
Bytes read: 39
Data read from the file:
This is a line of text inside the file.
이 예제는 try-with-resources 블록에서 FileInputStream을 사용하는 방법을 보여주며, 예외 발생 시에도 스트림이 자동으로 닫히도록 보장합니다.
API에 대한 더 깊은 이해를 위해 공식 Java 문서를 참조하세요: InputStream Javadoc.