- IO stream은 Input Output을 할 때 입출력 작업을 수행하기 위한 기본적인 클래스와 인터페이스의 집합
"보조 스트림"은 기본 스트림 (InputStream 또는 OutputStream)을 래핑하여 추가적인 기능을 제공하는 스트림입니다. 보조 스트림은 데이터의 처리, 변환, 버퍼링, 압축 등 다양한 작업을 수행할 수 있습니다. 여러 가지 보조 스트림이 제공되며, 다음은 몇 가지 중요한 보조 스트림입니다:
Buffered 스트림: BufferedInputStream 및 BufferedOutputStream은 버퍼를 사용하여 입출력 성능을 향상시킵니다. 내부적으로 데이터를 버퍼에 저장하고 한 번에 블록 단위로 읽거나 쓸 수 있습니다. 이로 인해 입출력 작업의 효율성이 증가합니다.
Data 스트림: DataInputStream 및 DataOutputStream은 기본 데이터 타입(primitive type)의 값들을 읽고 쓸 수 있습니다. 이들 스트림은 바이트 단위로 데이터를 읽고 쓰며, 자바의 기본 데이터 타입을 이진 형식으로 변환하여 처리합니다.
Object 스트림: ObjectInputStream 및 ObjectOutputStream은 객체 직렬화(serialization)를 지원합니다. 객체 직렬화는 객체를 이진 형식으로 변환하여 저장하거나 네트워크를 통해 전송할 수 있도록 합니다. 이를 통해 객체의 상태를 보존하고 복원할 수 있습니다.
압축 스트림: GZIPInputStream 및 GZIPOutputStream은 GZIP 압축을 지원합니다. 이들 스트림을 사용하여 데이터를 압축하거나 압축 해제할 수 있습니다. 압축을 통해 데이터 크기를 줄이고 전송 시간을 단축시킬 수 있습니다.
문자 스트림: InputStreamReader 및 OutputStreamWriter는 바이트 스트림을 문자 스트림으로 변환합니다. 바이트 단위로 읽거나 쓰는 스트림을 문자 단위로 읽거나 쓸 수 있도록 합니다. 문자 인코딩 및 디코딩에 유용합니다.
이 외에도 Java에서는 다양한 보조 스트림이 제공됩니다. 이러한 보조 스트림들은 기본 스트림에 추가적인 기능을 제공하여 입출력 작업을 효율적으로 처리할 수 있게 도와줍니다
문자 스트림은 데이터를 문자 단위로 처리하며, 문자 인코딩과 관련된 작업을 수행. 텍스트 데이터를 다룰 때 유용
바이트 스트림은 데이터를 바이트 단위로 처리하며, 이진 데이터에 적합.
문자 스트림은 텍스트 데이터 처리에, 바이트 스트림은 이진 데이터 처리에 사용.
- buffered 보조스트림 달 것
대상 파일: F:\a.java 사본 이름: F:\b.java 카피 되었습니다.
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class BufferedStreamExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); final int EOF = -1; String src, dst; System.out.print("대상 이름: "); src = scanner.nextLine(); System.out.print("사본 이름: "); dst = scanner.nextLine(); try(BufferedInputStream in = new BufferedInputStream(new FileInputStream(src)); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dst))){ int data; while(true) { data = in.read(); if(data == EOF) break; out.write(data); } System.out.println("카피 되었습니다."); }catch (IOException e) { e.printStackTrace(); } } }
대상 이름: data2.txt 사본 이름: data23.txt 카피 되었습니다.
- 원본 (data2.txt)
- 복사본 (data23.txt)
- try-with-resources는 자바에서 자원을 사용한 후 자동으로 해제해주는 기능을 제공하는 문법. 이를 사용하면 자원을 명시적으로 해제하는 코드를 작성하지 않아도 됨. try-with-resources는 AutoCloseable 인터페이스를 구현한 자원을 사용하며, 자원을 선언한 후에 try 문에 포함. 이를 통해 자원을 안전하게 관리하고 예외 발생 시에도 자원이 자동으로 해제됨.