본문 바로가기
기초 및 언어/▶ Java&JSP

35. 바이트스트림

by 류딩이 2025. 8. 26.

Java 바이트 스트림 (FileInputStream / FileOutputStream)

1. 바이트 스트림이란?

  • 정의: 파일의 내용을 바이트 단위(0~255) 로 읽거나 쓰는 스트림
  • 특징
    • 알파벳, 숫자, 기호뿐만 아니라 이진데이터(이미지, 동영상 등) 도 처리 가능
    • 스트림은 읽기 전용(Input) 또는 쓰기 전용(Output) 중 하나만 가능
    • 프로그램과 파일 사이에 데이터를 주고받는 연결 다리(통로) 역할

2. FileInputStream

  • 역할: 파일에서 데이터를 읽어오기 위한 스트림
  • 생성: new FileInputStream("파일명")
  • 주의점: 객체를 생성할 때 반드시 예외처리를 해야 함
  • 메서드
    • int read() : 1바이트 읽기 (값 범위 0~255), 파일 끝(EOF)이면 -1 반환

3. FileOutputStream

  • 역할: 파일에 데이터를 쓰기 위한 스트림
  • 생성: new FileOutputStream("파일명", append)
    • append = false (기본값): 기존 내용을 덮어씀
    • append = true : 기존 내용 뒤에 이어쓰기
  • 특징: 파일이 존재하지 않으면 자동으로 생성됨
  • 메서드
    • write(int b) : 1바이트 쓰기 ((char) 캐스팅 없어도 문자 단위로 기록 가능)

4. 코드 예제

import java.io.*;

public class Ex03_바이트스트림 {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;

        try {
            // 읽기용 다리
            fis = new FileInputStream("from.txt");

            // 쓰기용 다리 (append = true → 기존 내용 뒤에 추가)
            fos = new FileOutputStream("to.txt", true);
            System.out.println("파일 열기 성공!");

            int r;
            while (true) {
                r = fis.read();   // 한 글자(1바이트)씩 읽기
                if (r == -1)      // 파일 끝(EOF)이면 종료
                    break;
                System.out.print((char) r); // 콘솔에 출력
                fos.write(r);               // to.txt에 쓰기
            }

        } catch (FileNotFoundException e) {
            System.out.println("from.txt 파일을 찾을 수 없습니다.");
        } catch (IOException e) {
            System.out.println("read() 중 예외 발생");
            e.printStackTrace();
        } finally {
            try {
                fis.close(); // 연결 다리 끊기
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 


5. EOF (End Of File)

  • 모든 파일 끝에는 EOF 표시가 있다.
  • read() 메서드는 EOF를 만나면 -1을 반환 → 반복문 종료 조건으로 활용

 

6. 예외 클래스 계층

  • IOException
    • Exception → IOException
    • 입출력 작업 중 발생하는 모든 예외의 상위 클래스
  • FileNotFoundException
    • IOException의 하위 클래스
    • 파일이 없거나 접근 권한이 없을 때 발생
  • ClassNotFoundException
    • ReflectiveOperationException의 하위 클래스
    • 리플렉션을 통해 클래스를 찾지 못할 때 발생 (이번 예제와 직접적 관련은 없음)

 


7. 정리

  • FileInputStream → 파일 읽기 다리
  • FileOutputStream → 파일 쓰기 다리
  • read()가 -1을 반환하면 EOF 도달
  • append 옵션으로 파일 덮어쓰기 / 이어쓰기 결정
  • 반드시 close()로 자원 해제

 

👉 한 줄 요약:
바이트 스트림은 모든 종류의 데이터를 처리할 수 있는 기본 입출력 스트림으로, 파일 복사, 이미지·영상 처리 등에서 자주 사용된다.

 

 

📊 FileInputStream vs FileOutputStream 비교

구분  FileInputStream  FileOutputStream
역할 파일에서 데이터를 읽기 위한 스트림 파일에 데이터를 쓰기 위한 스트림
생성자 new FileInputStream("file.txt") new FileOutputStream("file.txt") new FileOutputStream("file.txt", true) → 이어쓰기
데이터 단위 1바이트(0~255) 단위로 읽음 1바이트(0~255) 단위로 기록
주요 메서드 int read() → 1바이트 읽기 int read(byte[] b) → 배열에 여러 바이트 읽기 void write(int b) → 1바이트 쓰기 void write(byte[] b) → 배열 통째로 쓰기
EOF 처리 파일 끝에서 read()가 -1 반환 해당 없음
파일 처리 방식 파일이 없으면 예외 발생 파일이 없으면 자동 생성됨
덮어쓰기 / 이어쓰기 해당 없음 기본: 덮어쓰기 옵션: append=true 시 이어쓰기
적합한 용도 텍스트, 이미지, 동영상 등 모든 파일 읽기 텍스트, 이미지, 동영상 등 모든 파일 쓰기
예외 FileNotFoundException, IOException FileNotFoundException, IOException

 

 

👉 이렇게 표로 보면, Input은 읽기만 / Output은 쓰기만,
그리고 Output은 파일 없으면 자동 생성 & 이어쓰기 옵션 가능이 가장 큰 차이점이에요.

'기초 및 언어 > ▶ Java&JSP' 카테고리의 다른 글

37. 문자 스트림 (FileReader / FileWriter / InputStreamReader)  (1) 2025.08.29
36. Buffer  (0) 2025.08.29
34. HashMap  (1) 2025.08.26
33. HashSet  (0) 2025.08.26
32. Vector와 Enumeration  (1) 2025.08.26