목표 : 싱글 바이트 단위 데이터 입력(열기)
준비물 : 파일 객체(없으면 에러), 스트림 객체(입력용)
try{} catch(){} 를 사용하기 싫으면 if 조건문을 입력해서 예외를 스킵해준다.
에러나는곳에 add throws를 클릭하면 예외처리가 자동 생성되어 에러가 사라진다.
파일의 크기는 long으로 설정한다.
입력 순서 : [프로그램] <- stream <- target <- [single.txt]
버퍼(buffer)을 사용한 대량 데이터를 복사할 수 있다.
public class Test02 {
public static void main(String[] args) throws IOException {
File target = new File("temp", "single.txt");
if(!target.isFile()) {
System.err.println("존재하지 않는 파일입니다");
System.exit(-1);
}
FileInputStream stream = new FileInputStream(target);
//[1] for를 이용하여 파일 크기만큼 반복
//- 사용하지 않음(나중에는 여러 글자를 불러오므로 횟수 계산이 어려움)
//for(int i=0; i < target.length(); i++) {
int n = stream.read();
System.out.println("n = " + n);
//}
[2] while을 이용하여 반복하여 읽기
//- EOF(End of File) 값인 -1이 나올 때까지 입력
while(true) {
int n = stream.read();
if(n == -1) break;
System.out.println("n = " + n);
}
//사용 완료한 통로는 정리한다.
stream.close();
}
}
준비물 : 파일 객체(없을 경우 파일이 자동 생성), 출력 스트림, +버퍼 스트림
출력 순서 : [프로그램] -> 분해(mixer) -> 임시보관(buffer) -> 통로(stream) -> 파일(target) -> [multi.txt]
입력 순서 : [프로그램] <- combine <- buffer <- stream <- target <- [multi.kh]
아래와 같은 코드는 데이터의 순서와 형태를 알지 못하면 읽어오지 못한다.
buffer : 한 개씩 들어오는 데이터를 의미 있는 데이터가 될 때까지 모았다가 보내주는 것이다.
변수.flush(); : 강제 전송 명령. 계속 사용할 경우.
(ex 통신, 메세지를 보내고서 카톡방에 있을 경우)
변수.close(); : flush 수행 후 종료.
더 이상 사용을 하지 않고 종료할 경우.
(ex 메세지를 보내고서 카톡방에 나갈 경우)
public class Test01 {
public static void main(String[] args) throws IOException {
File target = new File("temp", "multi.txt");
FileOutputStream stream = new FileOutputStream(target);
BufferedOutputStream buffer = new BufferedOutputStream(stream, 20); //buffer 크기 지정
DataOutputStream mixer = new DataOutputStream(buffer);
//출력 순서 : [프로그램] → mixer → buffer → stream → target → [multi.txt]
mixer.writeBoolean(false); //boolean 형식으로 분해해서 출력
mixer.writeByte(100); //byte 형식으로 분해해서 출력
mixer.writeInt(100); //int 형식으로 분해해서 출력
mixer.writeChar(100); //char 형식으로 분해해서 출력
mixer.writeLong(100L); //long 형식으로 분해해서 출력
mixer.writeFloat(100f); //float 형식으로 분해해서 출력
mixer.writeDouble(100d); //double 형식으로 분해해서 출력
//총 합계 28byte, 버퍼 크기는 기본 8192byte
//버퍼는 가득 차야 데이터가 전송이 된다.
//만약 프로그램 종료 등 여러 이유로 버퍼가 가득차지 않아도 전송하려면
//강제 전송 명령을 사용해야 한다.
//mixer.flush(); //강제 전송 명령. 계속 사용할 경우.(ex 통신) (ex 메세지를 보내고서 카톡방에 있을 경우)
mixer.close(); //flush 수행 후 종료. 더 이상 사용을 하지 않고 종료할 경우. (ex 메세지를 보내고서 카톡방에 나갈 경우)
}
}