본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

FilterInputStream FilterOutputStream 데이터를 필터링하거나 변환하다: 압축, 암호화

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();
        }
    }
}