[java] ZIP 알고리즘의 작동 원리
ZIP은 압축 알고리즘 중 하나로, 파일의 크기를 줄이는 데 사용됩니다. ZIP 알고리즘은 데이터를 효율적으로 압축하여 저장하고, 압축된 파일을 다시 원래의 형식으로 해제하는 기능을 제공합니다.
알고리즘 동작 원리
ZIP 알고리즘은 LZ77 (Lempel-Ziv 1977) 알고리즘과 허프만 코딩 (Huffman Coding) 알고리즘을 결합하여 작동합니다.
-
LZ77 알고리즘은 데이터에서 중복되는 부분을 찾아내고, 해당 중복 부분을 효율적으로 표현하는 방식으로 압축합니다. 이를 통해 데이터의 중복을 제거하여 압축률을 높일 수 있습니다.
-
Huffman 코딩 알고리즘은 각 문자 빈도수에 따라 가변 길이 부호를 부여하여 압축을 수행합니다. 빈도가 높은 문자일수록 짧은 부호가 할당되어, 전체적으로 더 효율적으로 압축을 수행할 수 있습니다.
ZIP 알고리즘은 이러한 과정을 통해 입력된 데이터를 효율적으로 압축하여 저장하고, 다시 필요할 때 압축을 해제하여 복원할 수 있도록 지원합니다.
예제 코드
다음은 Java를 사용하여 ZIP 알고리즘으로 파일을 압축하는 간단한 예제 코드입니다.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipExample {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
FileOutputStream fos = new FileOutputStream("compressed.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
ZipEntry ze= new ZipEntry("example.txt");
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream("example.txt");
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
in.close();
zos.closeEntry();
zos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
요약
ZIP 알고리즘은 LZ77과 Huffman 코딩 알고리즘을 결합하여 데이터를 효율적으로 압축합니다. 그 결과 파일 크기를 줄여 저장 공간을 절약할 수 있으며, 복원하여 원래 데이터를 얻을 수 있습니다.
참고 문헌:
- https://en.wikipedia.org/wiki/ZIP_(file_format)
- https://www.geeksforgeeks.org/huffman-coding-greedy-algo-3/