JAVA/JAVA
Java | I/O 바이트 단위 스트림
pathas
2020. 2. 6. 22:26
바이트 단위 스트림
바이트 단위로 데이터를 읽거나 쓰는 스트림
InputStream
바이트 단위로 읽는 스트림 중 최상위 스트림
추상 메소드를 포함한 추상 클래스로서 하위 스트림 클래스가 상속받아
각 클래스 역할에 맞게 추상 메소드의 기능을 구현함
주로 사용하는 하위 클래스
스트림 클래스 | 설명 |
---|---|
FileInputStream | 파일에서 바이트 단위로 자료를 읽음 |
ByteArrayInputStream | Byte 배열 메모리에서 바이트 단위로 자료를 읽음 |
FilterInputStream | 기반 스트림에서 자료를 읽을 때 추가 기능을 제공하는 보조 스트림의 상위 클래스 |
InputStream 메소드
메소드 | 설명 |
---|---|
int read() | 입력 스트림으로부터 한 바이트의 자료를 읽음 읽은 자료의 바이트 수 반환 |
int read(byte b[]) | 입력 스트림으로부터 b[]크기의 자료를 b[]에 읽어 옴 읽은 자료의 바이트 수 반환 |
int read(byte b[], int off, int len) | 입력 스트림으로부터 b[]크기의 자료를 off 인덱스부터 len 개수만큼 읽음, 읽은 자료의 바이트 수 반환 |
void close() | 입력 스트림과 연결된 대상 리소소를 닫음 ex) FileInputStream의 경우 파일을 닫음 |
int available() | 입력 스트림으로 읽어올 수 있는 잔여 바이트 수 반환 파일을 불러오지 못하는 경우 -1 리턴 |
FileInputStream
파일에서 바이트 단위로 자료를 읽어 들일 때 사용하는 스트림 클래스
스트림을 사용하기 위해서는 먼저 스트림 클래스 객체를 생성해야 함
FileInputStream 생성자
생성자 | 설명 |
---|---|
FileInputStream(String name) | 파일 이름(경로 포함) name을 매개변수로 받아 입력 스트림 생성 |
FileInputStream(File f) | File 클래스 정보(객체)를 매개변수로 받아 입력 스트림 생성 |
OutputStream
바이트 단위로 쓰는 스트림 중 최상위 스트림
주로 사용하는 하위 클래스
스트림 클래스 | 설명 |
---|---|
FileOutputStream | 파일에 바이트 단위로 자료를 씀 |
ByteArrayOutputStream | Byte 배열에 바이트 단위로 자료를 씀 |
FilterOutputStream | 기반 스트림에서 자료를 쓸 때 추가 기능을 제공하는 보조 스트림의 상위 클래스 |
OutputStream Method
메소드 | 설명 |
---|---|
void write(int b) | 한 바이트 출력 |
void write(byte[] b) | b[] 배열에 있는 자료 출력 |
void write(byte b[], int off, int len) | b[] 배열에 있는 자료의 off 인덱스부터 len 개수만큼 자료를 출력 |
void flush() | 출력을 위해 잠시 자료가 머무르는 출력 버퍼를 강제로 비워서 자료 출력 |
void close() | 출력 스트림과 연결된 대상 리소스를 닫음, 출력 버퍼가 비워짐 ex) FileInputStram의 경우 파일을 닫음 |
OutputStream 생성자
메소드 | 설명 |
---|---|
FileOutputStream(String name) | 파일 이름(경로 포함) name을 매개변수로 받아 출력 스트림 생성 write()메소드 사용시 같은 파일에 데이터를 덮어서 씀 |
FileOutputStream(String name, boolean append) | 파일 이름(경로 포함) name을 매개변수로 받아 출력 스트림 생성 append 값이 true이면 파일 스트림을 닫고 다시 생성할 때 같은 파일의 끝에 이어서 씀, 기본값은 false |
FileOutputStream(File f) | File 클래스 객체를 매개변수로 받아 출력 스트림 생성 |
FileOutputStream(File f, boolean append) | File 클래스 객체를 매개변수로 받아 출력 스트림 생성 append 값이 true이면 파일 스트림을 닫고 다시 생성할 때 같은 파일의 끝에 이어서 씀, 기본값은 false |
예제_FileInputStream & FileOutputStream
package j200206;
import java.io.*;
public class FileInputTest2 {
public static void main(String[] args) throws Exception {
// 해당 파일을 읽어들이는 스트림 객체 생성
FileInputStream fis = new FileInputStream("C:/webtest/3.java/JAVA-Study/200206/src/j200206/SimpleIn.java");
// 파일을 출력할 스트림 객체 생성
FileOutputStream fos = new FileOutputStream("C:/webtest/3.java/JAVA-Study/200206/src/j200206/Test.java");
// 파일을 임시로 저장할 변수
int read = 0;
while (true) {
read = fis.read();
// read 값이 -1이 되면 while문에서 탈출
if (read == -1)
break;
fos.write(read);
}
/*
j200206 폴더에 test.java 생성
package j200206;
....
*/
}
}
※ java 파일뿐만 아니라 동영상, 이미지, 실행 파일 등 거의 모든 파일에 적용 가능
※ 스트림 사용 후에는 close() 메소드로 메모리에서 해제해 주어야 프로그램 성능을 보다 향상시킬 수 있음
바이트 단위로 데이터를 읽고 쓰는 바이트 단위 스트림에 대해 알아보았습니다.
그 중에서도 FileInputStream과 FileOutputStream은 가장 많이 쓰이기 때문에 사용법 정도는 알아두는 것이 좋겠습니다.
스트림 클래스에서 제공하는 메소드 중 자주 쓰이는 메소드 이름은 클래스마다 대부분 비슷하기 때문에
우선은 입/출력 메소드로 구분해서 메소드를 조금 외워두면 좋을 것 같습니다.