바이트 스트림은 바이트 단위의 바이너리 데이터가 흐르는 스트림이다. 이미지나 동영상 파일을 읽고 쓰기 위해서는 반드시 바이트 스트림을 이용해야 한다. 바이너리 파일 입출력을 위한 대표적인 스트림 클래스는 FileInputStream/ FileOutputStream 이다.
바이너리 파일 쓰기
프로그램 내의 변수나 배열에 들어 있는 바이너리 값을 그대로 파일에 저장할 필요가 있다. 예를 들면 이미지 버퍼를 그대로 이미지 파일에 기록하는 경우이다. 변수의 바이너리 값이 기록된 바이너리 파일은 사람이 읽고 쉽게 해석할 수 없다. 변수나 배열을 그대로 c:\temp\test.out 파일에 기록하는 예를 알아보자.
- 파일 출력 스트림 생성
: c:\temp\test.out에 바이너리를 기록하는 출력 스트림을 생성한다.
FileOutputStream fout = new FileOutputStream(" c:\\temp\\test.out ");
FileOutputStream 생성자는 스트림을 생성한 후, c:\temp\test.out 파일을 생성하여 스트림 자신에 연결한다. 파일이 이미 있으면 그 내용을 지우고 스트림에 연결한다.
- 파일 쓰기
: 파일 쓰기는 write() 메소드를 이용하여 배열 데이터를 기록하면 된다.
byte b[] = {10,20,-5, 100,-30, 24};
for( int i = 0; i < b.length ; i++)
fout.write(b[i]); //배열 b의 바이트를 바이너리 그대로 기록.
혹은 for문없이 한번에 배열을 통째로 기록할 수도 있다. fout.write(b);
FileOutputStream 클래스의 생성자
- FileOutputStream(File file) : file이 지정하는 파일에 출력하는 FileOutputStream 생성
- FileOutputStream(String name) : name이 지정하는 파일에 출력하는 FileOutputStream 생성
- FileOutputStream(File file, boolean append) : FileOutputStream을 생성하며 append가 true이면 file이 지정하는 파일의 마지막 데이터 부터 저장
- FileOutputStream(String name, boolean append) : FileOutputStream을 생성하며 append가 true이면 name 이름의 파일의 마지막부터 데이터 저장
FileOutputStream 의 주요 메소드
- void write(int b) : int형으로 넘겨진 한 바이트를 출력 스트림으로 출력
- void write(byte[] b) : 배열 b의 바이트를 모두 출력 스트림으로 출력
- void write(byte[] b, int off, int len) : len 크기 만큼 off 부터 배열 b를 출력 스트림으로 출력
- void flush() : 출력 스트림에서 남아 있는 바이너리 데이터 모두 출력
- void close() : 출력 스트림을 닫고 관련된 시스템 자원 해제
바이너리 파일 읽기
바이트 스트림으로 파일을 읽는 스트림 클래스는 FileInputStream 이다. FileInputStream을 이용하여 c:\temp\test.out 파일의 바이너리 값들을 배열로 읽어 들이는 코드를 봅시다.
int n = 0, c;
while ( (c = fin.read()) != -1 ) { b[n] = (byte)c; n++) } >> fin.read(b)로 바꿀 수 있다.
FileInputStream 클래스의 생성자
- FileInputStream (File file) : file이 지정하는 파일로부터 읽는 FileInputStream 생성
- FileInputStream (String name) : name이 지정하는 파일로 부터 읽는 FileInputStream 생성
FileInputStream의 주요 메소드
- int read() : 입력 스트림에서 한 바이트를 읽어 int형으로 리턴
- int read(byte[] b) : 최대 배열 b의 크기만큼 바이트를 읽음. 도중에 EOF를 만나면 실제 읽은 바이트 수 리턴
- int read(byte[] b, int off, int len) : 최대 len개의 바이트를 읽어 b 배열의 off 위치부터 저장. 읽는 도중 EOF를 만나면 실제 읽은 바이트 수 리턴
- int available() : 입력 스트림에서 현재 읽을 수 있는 바이트 수 리턴 - 참고만 하기
- void close() : 입력 스트림을 닫고 관련된 시스템 자원 해제
'JAVA > 입출력 스트림과 파일 입출력' 카테고리의 다른 글
05. 파일 복사 응용프로그램 작성 (0) | 2024.03.14 |
---|---|
04. File 클래스 (0) | 2024.03.14 |
02. 문자 스트림과 텍스트 파일 입출력 (0) | 2024.03.14 |
01. 자바의 입출력 스트림 (0) | 2024.03.14 |