토이프로젝트/파일 업로드&다운로드
[File I/O #3] InputStream과 OutputStream 완전 정리
거북이의 기술블로그
2025. 4. 20. 00:29
목차
1. Resource와 Stream I/O 이해3. InputStream/OutputStream 이해하기
File I/O #3 — InputStream과 OutputStream 완전 정리
InputStream이란?
InputStream은 Java에서 바이트 단위로 데이터를 읽기 위한 추상 클래스입니다.
파일, 메모리, 네트워크 등 다양한 소스로부터 데이터를 읽을 수 있습니다.
int read(); // 한 바이트 읽기
int read(byte[] b); // 바이트 배열로 읽기
int read(byte[] b, int off, int len);// 일부 바이트만 읽기
long skip(long n); // n 바이트 건너뛰기
int available(); // 읽을 수 있는 바이트 수
void close(); // 스트림 닫기
void mark(int readlimit); // 현재 위치에 마크 설정
void reset(); // mark 위치로 되돌리기
boolean markSupported(); // mark/reset 지원 여부
주요 구현체
- FileInputStream: 파일에서 바이트 읽기
- ByteArrayInputStream: 바이트 배열을 읽기
- BufferedInputStream: 버퍼를 사용해 효율적 읽기
- ObjectInputStream: 직렬화된 객체 복원
- PipedInputStream: 스레드 간 데이터 전달
- AudioInputStream: 오디오 파일 읽기
- SequenceInputStream: 여러 InputStream을 하나로 연결
InputStream 사용 예시
InputStream is = new FileInputStream("data.txt");
int data;
while ((data = is.read()) != -1) {
System.out.print((char) data);
}
is.close();
OutputStream이란?
OutputStream은 Java에서 바이트 단위로 데이터를 쓰기 위한 추상 클래스입니다.
파일, 메모리, 네트워크 등에 데이터를 출력할 때 사용됩니다.
void write(int b); // 한 바이트 쓰기
void write(byte[] b); // 바이트 배열 쓰기
void write(byte[] b, int off, int len); // 일부 바이트만 쓰기
void flush(); // 버퍼 비우기 (즉시 출력)
void close(); // 스트림 닫기
주요 구현체
- FileOutputStream: 파일에 바이트 쓰기
- ByteArrayOutputStream: 바이트를 메모리에 저장
- BufferedOutputStream: 버퍼를 이용한 효율적 쓰기
- ObjectOutputStream: 객체를 직렬화하여 저장
- PipedOutputStream: 다른 스레드로 바이트 전달
OutputStream 사용 예시
OutputStream os = new FileOutputStream("output.txt");
String content = "Hello, OutputStream!";
os.write(content.getBytes());
os.close();
InputStream과 OutputStream 연동 예제
파일을 읽어서 다른 파일로 복사하는 기본 구조입니다.
InputStream is = new FileInputStream("input.txt");
OutputStream os = new FileOutputStream("output.txt");
int data;
while ((data = is.read()) != -1) {
os.write(data);
}
is.close();
os.close();
정리
- InputStream: 바이트 단위 입력 처리 (읽기)
- OutputStream: 바이트 단위 출력 처리 (쓰기)
- BufferedStream을 함께 사용하면 성능이 향상됩니다.
- Resource로부터 InputStream을 받아 처리할 수 있습니다.