기초 및 언어/▶ Java&JSP
36. Buffer
by 류딩이
2025. 8. 29.
📌 Java I/O : BufferedInputStream / BufferedOutputStream 정리
🔹 Buffer(버퍼)란?
- 임시 기억 장치
- 데이터를 모았다가 한 번에 처리하기 위해 사용됨
- 입출력 시 속도를 향상시킴
- 버퍼가 가득 차야 실제 목적지(파일 등)에 기록됨
2. 코드 예제
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Ex04_Buffer {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
// 파일 쓰기
fos = new FileOutputStream("data.txt", false);
bos = new BufferedOutputStream(fos, 5); // 버퍼 크기 5
for (int i = 1; i <= 9; i++) {
bos.write(i + 48); // '1'~'9' 아스키코드 기록
}
bos.flush(); // 남아 있는 데이터 강제 기록
// 파일 읽기
fis = new FileInputStream("data.txt");
bis = new BufferedInputStream(fis, 5);
3. 실행 흐름 설명
- 쓰기 단계
- 버퍼 크기는 5 → "12345"가 찼을 때 파일로 기록됨
- "6789"는 버퍼에만 존재
- flush() 실행 시 "6789"까지 기록됨
- 최종적으로 data.txt 안에는 "123456789" 저장됨
- 읽기 단계
- bis.read()로 한 바이트씩 읽음
- '1'~'9'의 아스키코드 값 출력
(예: '1' → 49, '2' → 50 ... '9' → 57)
- 마무리
- close() 호출 시 flush 자동 수행 후 스트림 종료
4. 핵심 정리
- BufferedOutputStream, BufferedInputStream → 보조 스트림 (속도 향상용)
- 버퍼에 데이터가 가득 차야 실제로 파일에 기록됨
- flush() 메서드로 강제 기록 가능
- close() 시에도 자동으로 flush 후 종료됨