728x90
반응형
* 바이트 스트림은 바이트 단위로 바이너리 데이터가 흐르는 스트림이다.
바이트 스트림은 바이너리 데이터를 있는 그대로 입출력하기 때문에 이미지나 동영상 파일 입출력에 필수적이고, 문자들로 구성된 파일도 입출력할 수 있다.
* FileOutputStream을 이용한 바이너리 파일 쓰기
프로그램 내의 변수나 배열에 들어 있는 바이너리 값을 그대로 파일에 저장해야 하는 경우가 있다. 메모리에 있는 이미지 비트들을 그대로 이미지 파일로 저장하는 경우이다.
* FileOutputStream 클래스의 생성자
생성자 | 설명 |
FileOutputStream(File file) | file이 지정하는 파일에 출력하는 FileOutputStream 생성 |
FileOutput(String name) | name이 지정하는 파일에 출력하는 FileOutputStream 생성 |
FileOutputStream (File file, boolean append) |
FileOutputStream을 생성하며 append가 true이면 file이 지정하는 파일의 마지막부터 데이터 저장 |
FileOutputStream (String name, boolean append) |
FileOutputStream을 생성하며 append가 true이면 name 이름의 파일의 마지막부터 데이터 저장 |
* OutputStream과 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() | 출력 스트림을 닫고 관련된 시스템 자원 해제 |
* FileOutpuStream으로 바이너리 파일 쓰기
package Ch0805Ex;
import java.io.*;
public class Ch0805Ex {
public static void main(String[] args) {
byte b[] = {7,51,3,4,-1,24};
try {
FileOutputStream fout = new FileOutputStream("c:\\Temp\\test.out");
for(int i=0; i<b.length; i++) {
fout.write(b[i]); // 배열 b의 바이너리를 그대로 기록
// for문 없이 한 번에 배열 b[]를 저장할 수도 있다.
}
fout.close();
}catch(IOException e) {
System.out.println("c:\\Temp\\test.out에 저장할 수 없었습니다. 경로명을 확인해 주세요");
return;
}
System.out.println("c:\\Temp\\test.out을 저장하였습니다.");
}
}
* FileInputStream을 이용한 바이너리 파일 일기
바이트 스트림으로 파일을 읽는 스트림 클래스는 FileInputStream이다.
* FileInputStream 클래스의 생성자
생성자 | 설명 |
FileInputStream(File file) | file이 지정하는 파일로부터 읽는 FileInputStream 생성 |
FileInputStream(String name) | name이 지정하는 파일로부터 읽는 FileInputStream 생성 |
* InputStream과 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() | 입력 스트림을 닫고 관련된 시스템 자원 해제 |
* FIleInputStream으로 바이너리 파일 읽기
package Ch0806Ex;
import java.io.*;
public class Ex0806Ex {
public static void main(String[] args) {
byte b[] = new byte [6]; // 비어 있는 byte 배열
try {
// "c:\\Temp\\test.out" 파일을 읽어 배열 b에 저장
FileInputStream fin = new FileInputStream("c:\\Temp\\test.out");
int n=0,c;
while((c=fin.read())!=-1) { // -1은 파일 끝(EOF)
b[n] = (byte)c; // 읽은 바이트를 배열에 저장
n++;
// fin.read(b);의 한 줄로 코딩할 수 있다.
}
// 배열 b[]의 바이트 값을 모두 화면에 출력
System.out.println("c:\\Temp\\test.out에서 읽은 배열을 출력합니다.");
for(int i=0; i<b.length; i++)
System.out.print(b[i] + " ");
System.out.println();
fin.close();
} catch(IOException e) {
System.out.println("c:\\Temp\\test.out에서 읽지 못했습니다. 경로명을 체크해보세요");
}
}
}
반응형
'IT > 자바공부' 카테고리의 다른 글
File 클래스, 명품 자바 프로그래밍 8장 (0) | 2022.06.14 |
---|---|
버퍼 입출력과 파일 입출력, 명품 자바 프로그래밍 8장 (0) | 2022.06.14 |
문자 집합과 InputStreamReader, 명품 자바 프로그래밍 8장 (0) | 2022.06.13 |
문자 스트림과 파일 입출력 (0) | 2022.06.13 |
스트림 입출력 Stream, 명품 자바 프로그래밍 8장 (0) | 2022.06.13 |