바이트 스트림
- 바이트 단위로 데이터가 흐르는 스트림
- 바이너리 데이터를 있는 그대로 입출력
- 이미지나 동영상 파일 입출력에 필수적
InputStream, OutputStream
- 추상 클래스
- 바이트 입출력 처리를 위한 공통 기능을 가진 슈퍼 클래스
FileInputStream, FileOutputStream
- 파일 입출력을 위한 클래스
- 파일로부터 바이너리 데이터를 읽거나 파일에 바이너리 데이터를 저장
DataInputStream, DataOutputStream
- 기본 타입 값을 바이너리 형태로 입출력
- 문자열을 바이너리 형태로 입출력
FileOutputStream을 이용한 바이너리 파일 쓰기
- 프로그램 내의 변수나 배열에 들어 있는 바이너리 값을 그대로 파일에 저장
- 메모리에 있는 이미지 비트들을 그대로 이미지 파일로 저장
- 바이너리 파일은 사람이 읽고 해석하는 것이 거의 불가능
- 바이너리 데이터를 파일에 저장할 때 FileOutputStream 클래스 이용
FileOutputStream 클래스의 생성자
OutputStream과 FileOutputStream의 공통 주요 메소드
파일 출력 스트림 생성
FileOutputStream fout = new FileOutputStream("c:\\Temp\\test.out");
//c\Temp\test.out 파일에 바이너리 데이터를 생성하는 출력 스트림 생성
- FileOutputStream 생성자는 c:\Temp\test.out 파일을 생성하여 연결
- 파일이 이미 있으면 그 내용을 지우고 스트림에 연결
- 쓰기가 이루어지면 c:\Temp\test.out 파일은 바이너리 파일이 됨
파일 쓰기
byte b[] = {7, 51, 3, 4, -1, 24};
for(int i=0; i<b.length; i++)
fout.write(b[i]); //배열 b[]의 바이트를 바이너리 그대로 파일에 저장
- write() 메소드를 이용하여 한 바이트씩 배열 데이터 기록
fout.write(b); //배열 b[]의 바이트 모두 저장
- for문 없이 한 번에 저장 가능
FileInputStream을 이용한 바이너리 파일 읽기
- FileInputStream은 바이트 스트림으로 파일을 읽는 스트림 클래스
FileInputStream 클래스 생성자
InputStream과 FileInputStream의 공통 주요 메소드
파일 입력 스트림 생성
- FileInputStream 클래스는 파일과 연결한 바이트 스트림을 생성
FileInputStream fn = new FileInputStream("c:\\Temp\\test.out");
- c:\Temp\test.out 파일을 찾아 열고 이 파일을 연결한 스트림 fin을 생성
파일 읽기
- fin.read() 메소드 호출
- 파일 스트림으로부터 한 바이트를 읽어 리턴
byte b[] = new byte[6]; //비어있는 배열
int n=0, c;
while((c=fin.read())!=-1){ //EOF까지 한 바이트씩 읽기
b[n]=(byte)c; //읽은 바이트를 배열에 저장
n++;
}
- read() 메소드를 이용하여 파일에 저장된 바이트들을 읽고 배열 byte b[]에 다시 채우는 코드
fin.read(b); //파일에서 배열 b[]의 크기만큼 바이트 읽기
- 한 줄로 가능
스트림 닫기
fin.close();
예제 8-5 FileOutputStream을 이용하여 byte[] 배열 속에 들어 있는 바이너리 값을 c:\Temp\test.out 파일에 저장
import java.io.*;
public class FileOutputStreamEx {
public static void main(String[] args) {
byte b[]={7, 51, 3, 4, -1, 24};
try {
FileOutputStream fout=new FileOutputStream("c:\\Temp\\test.out");
fout.write(b);
fout.close();
}
catch(IOException e) {
System.out.println("c:\\Temp\\test.out에 저장할 수 없습니다. 경로명을 확인해 주세요.");
return;
}
System.out.println("c:\\Temp\\test.out을 저장하였습니다.");
}
}
예제 8-6 FileInputStream을 이용하여 c:\Temtest.out 파일을 읽어 byte[] 배열 속에 저장하고 화면에 출력하는 코드
public class FileInputStreamEx {
public static void main(String[] args) {
byte b[]=new byte[6]; //빈 byte 배열
try {
FileInputStream fin=new FileInputStream("c:\\Temp\\test.out");
int n=0, c;
while((c=fin.read())!=-1) {
b[n]=(byte)c++;
n++;
}
//출력
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에서 읽지 못했습니다. 경로명을 다시 확인하세요.");
}
}
}
'java > 개념' 카테고리의 다른 글
File 클래스 (0) | 2024.06.23 |
---|---|
버퍼 입출력과 파일 입출력 (0) | 2024.06.23 |
문자 스트림과 파일 입출력 (0) | 2024.06.19 |
입출력 스트림 (0) | 2024.06.19 |
제네릭과 배열 (0) | 2024.06.10 |