import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class MyFileOutputStream {
public static void main(String[] args) {
long start = System.nanoTime();
// 데이터가 존재
String data = "Hello, Java FileOutputStream \n 안녕반가워";
// 1. 파일에다가 데이터를 저장 하고 싶다면 (바이트 기반)
// 자바 8버전 부터 제공
// try-catch-resource -> (자동으로 자원 닫아 준다)
try (FileOutputStream fos = new FileOutputStream("output.txt", false)) {
// 수행 코드
// data(String) 가지고 있는 문자열들을 바이트 배열로 반환 처리
//byte[] bytes = data.getBytes();
byte[] bytes = {72, 101, 108, 108, 111};
System.out.println("bytes : " + bytes);
for (int i = 0; i < bytes.length; i++) {
System.out.println("bytes[i] : " + bytes[i]);
}
// 연결된 스트림을 활용해서 바이트 배열을 파일에다가 흘려 보냄
fos.write(bytes);
System.out.println("파일출력스트림을 통해서 데이터를 씀");
} catch (FileNotFoundException e) {
System.out.println("파일이 없음");
} catch (IOException e) {
e.printStackTrace(); // 어디서 오류가 났는데 콘솔에다가 찍어달라는..
}
// 동작 이해해 보기
// 파일에 바이트 단위로 데이터를 쓰고
// 그 파일을 열었을 때 글자로 보이는 이유는 파일을 읽는 프로그램
// 파일 내에 바이트 데이터를 문자로 해석해서 보여 주었다.
long end = System.nanoTime();
long duraiton = end - start;
System.out.println("기반 스트림 파일 입출력 소요 시간 : " + duraiton );
}// end of main
}
실행 결과_____
보조스트림의 사용
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
public class MyBufferedOutputStream {
public static void main(String[] args) {
// 현재 시간 (시작)
long start = System.nanoTime(); // (더 정밀한 현재 시간을 출력)
String data = "기반 스트림 + 보조 스트림을 활용해보자";
// try - catch - resorce 활용
try (FileOutputStream fos = new FileOutputStream("output2.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);) {
// 코드 수행 부분
byte[] bytes = data.getBytes();
// 보조 스트림 (버퍼)
bos.write(bytes);
// 간혹 버퍼에 데이터가 남아 있다면 중복된 데이터를 쓸 수 있다
// 한 번 사용한 다음에
bos.flush(); // flush --> 물을 내리다. (버퍼에 담긴 데이터를 비워야 새로운 데이터를 넣을 수 있으니까)
System.out.println("보조 스트림을 활용한 파일 출력 완료");
// 시간 측정을 해보고 싶다
} catch (Exception e) {
e.printStackTrace();
}
// 현재 시간 (종료)
long end = System.nanoTime();
// 종료 - 시작 = 소요 시간
long duraiton = end - start;
System.out.println("기반 스트림 파일 입출력 소요 시간 : " + duraiton);
// 실행 코드 안에 다가 적어야됨
}
}
실행 결과_____
💡중요 !
버퍼를 사용하는 것은 입출력 작업에서 매우 중요한 역할을 하며, 그 원리를 이해하는 것은 데이터 처리의 효율성을 높이는 데 큰 도움이 된다. 버퍼의 사용 원리는 기본적으로 '일괄 처리' 또는 '집단 처리' 방식에 비유할 수 있다.
버퍼는 임시 저장 공간을 말하며, 데이터를 최종 목적지(파일, 네트워크, 디스플레이 등)에 쓰기 전에 일시적으로 데이터를 모아 두는 역할을 한다.
버퍼를 사용하는 것은 많은 이점이 있지만, 일부 단점도 있다. 예를 들어, 버퍼가 완전히 채워질 때까지 기다려야 하는 경우 실시간 처리에는 적합하지 않을 수 있다. 또한, 시스템이 예기치 않게 종료될 경우 버퍼에 저장된 데이터는 손실될 수 있다.
[JAVA] 문자 기반 스트림 (0) | 2024.05.17 |
---|---|
[JAVA] 파일 Copy (바이트기반 입/출력) (0) | 2024.05.17 |
[JAVA] 파일 입력 스트림(바이트 기반) (0) | 2024.05.16 |
[JAVA] 표준 입출력 (0) | 2024.05.16 |
[JAVA] Map 인터페이스 (0) | 2024.05.16 |