-
Java | I/O 바이트 단위 스트림JAVA/JAVA 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이면 파일 스트림을 닫고 다시 생성할 때 같은 파일의 끝에 이어서 씀, 기본값은 falseFileOutputStream(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은 가장 많이 쓰이기 때문에 사용법 정도는 알아두는 것이 좋겠습니다.
스트림 클래스에서 제공하는 메소드 중 자주 쓰이는 메소드 이름은 클래스마다 대부분 비슷하기 때문에
우선은 입/출력 메소드로 구분해서 메소드를 조금 외워두면 좋을 것 같습니다.
'JAVA > JAVA' 카테고리의 다른 글
Java | I/O 보조 스트림 (0) 2020.02.06 Java | I/O 문자 단위 스트림 (0) 2020.02.06 Java | I/O 표준 입출력 (0) 2020.02.06 Java | I/O(Input / Output) 입출력 개요 (0) 2020.02.06 Java | 예외 처리 throws & throw (0) 2020.02.05