FilterInputStream FilterOutputStream
InputStream OutputStream의 자손, 모든 보조스트림의 조상.
다른 입력 및 출력 스트림에 래핑하여 데이터를 필터링하거나 변환한다.
압축, 암호화 등의 작업을 수행할 수 있다.
FilterInputStream
아래예시는 데이터를 버퍼링하여 읽는 효율을 높이기위해 FilterInputStream을 사용해 BufferedInputStream을 래핑하여 파일에서 데이터를 읽는다.
import java.io.*;
public class FilterInputStreamExample {
public static void main(String[] args) {
try {
// FileInputStream을 사용하여 파일에서 데이터를 읽는 입력 스트림 생성
InputStream inputStream = new FileInputStream("input.txt");
// FilterInputStream을 사용하여 입력 스트림을 래핑
FilterInputStream filterInputStream = new BufferedInputStream(inputStream);
// 데이터 읽기 작업 수행
int data = filterInputStream.read();
while (data != -1) {
System.out.print((char) data); // 읽은 데이터 출력
data = filterInputStream.read();
}
// 스트림 닫기
filterInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
FilterOutputStream
아래예시는 데이터를 버퍼링하여 쓰는 효율을 높이기위해 FilterOutputStream을 사용해 BufferedOutputStream를 래핑하여 파일에서 데이터를 쓴다.
import java.io.*;
public class FilterOutputStreamExample {
public static void main(String[] args) {
try {
// FileOutputStream을 사용하여 파일에 데이터를 쓰는 출력 스트림 생성
OutputStream outputStream = new FileOutputStream("output.txt");
// FilterOutputStream을 사용하여 출력 스트림을 래핑
FilterOutputStream filterOutputStream = new BufferedOutputStream(outputStream);
// 데이터 쓰기 작업 수행
String data = "Hello, World!";
filterOutputStream.write(data.getBytes());
// 스트림 닫기
filterOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
위 내용을 바탕으로 압축, 암호화예시를 확인하자.
압축 (Compression)
GZIPOutputStream은 FilterOutputStream의 하위클래스이다.
import java.io.*;
import java.util.zip.*;
public class CompressionExample {
public static void main(String[] args) {
try {
// 압축할 데이터
String data = "Hello, World!";
// 파일에 데이터를 쓰는 출력 스트림 생성
OutputStream outputStream = new FileOutputStream("compressed_output.txt");
// GZIPOutputStream을 사용하여 출력 스트림을 압축
OutputStream compressedStream = new GZIPOutputStream(outputStream);
// 데이터 쓰기 작업 수행
compressedStream.write(data.getBytes());
// 스트림 닫기
compressedStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
암호화 (Encryption)
CipherOutputStream은 FilterOutputStream의 하위 클래스이다.
import java.io.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class EncryptionExample {
public static void main(String[] args) {
try {
// 암호화할 데이터
String data = "Hello, World!";
// 비밀키 생성
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// 파일에 데이터를 쓰는 출력 스트림 생성
OutputStream outputStream = new FileOutputStream("encrypted_output.txt");
// CipherOutputStream을 사용하여 출력 스트림을 암호화
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
OutputStream encryptedStream = new CipherOutputStream(outputStream, cipher);
// 데이터 쓰기 작업 수행
encryptedStream.write(data.getBytes());
// 스트림 닫기
encryptedStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
'JAVA' 카테고리의 다른 글
DataInputStream 8가지 기본 자료형의 단위로 읽다 (0) | 2024.03.20 |
---|---|
BufferedInputStream BufferedOutputStream 스트림의 입출력 효율을 높이는 보조스트림 (0) | 2024.03.20 |
바이트기반 파일입출력 스트림 FileInputStream FileOutputStream, String File boolean FileDescriptor (0) | 2024.03.20 |
데이터를 임시로 배열에 담는다, 바이트배열 ByteArrayInputStream ByteArrayOutputStream (0) | 2024.03.19 |
바이트기반스트림 OutputStream의 메서드 close() flush() write() (0) | 2024.03.19 |