Java에서 LZW 압축 알고리즘 구현.
LZW는 1984 년 Abraham Lempel, Jacob Ziv 및 Terry Welch에 의해 만들어진 압축 알고리즘입니다. 가장 기본적인 형태에서 압축 파일을 일련의 고정 길이 코드 워드로 출력합니다. 가변 폭은 사전이 채워짐에 따라 코드 워드 출력 크기를 늘리는 데 사용될 수 있습니다. Further, 사전이 채워지면 알고리즘은 패턴 추가를 중지하고 이미 발견 된 패턴만으로 압축을 계속할 수 있습니다.
이 프로젝트는 LZW 압축 알고리즘을 수정하여 가변 폭 코드 워드를 사용하고 특정 조건에서 코드북을 선택적으로 재설정합니다. 이러한 변경 사항을 통해 수정 된 LZW 코드의 성능을 코스 교과서의 LZW 코드와 비교했으며 널리 사용되는 압축 응용 프로그램의 성능을 비교했습니다.
javac MyLZW.java 실행하여 프로그램을 컴파일하십시오.
이 프로젝트를 실행하기위한 3 가지 모드가 있습니다.
LZW.java 에 의해 구현되었습니다). 압축 중에 프로그램에서 사용해야하는 모드를 선택해야합니다. 파일을 압축하는 데 사용되는 모드는 파일을 확장하는 데 사용되어야합니다. 사용자는 확장에 사용하는 모드를 명시 할 필요가 없습니다. 파일을 압축하는 데 사용되는 모드는 출력 파일의 시작 부분에 저장되어 확장 중에 자동으로 검색 될 수 있습니다. 압축 중에 사용할 모드를 설정하기 위해 프로그램은 3 개의 명령 줄 인수를받습니다.
* "N"은 아무것도 모드를하지 않습니다
재설정 모드의 경우 * "R"
* 모니터 모드의 경우 "M"
제공된 LZW 코드는 이미 압축 또는 확장을 수행 해야하는지 (각각 "-"및 "+",)를 결정하기 위해 명령 줄 인수를 수락하고, 입력/출력 파일은 표준 I/O 리디렉션을 통해 제공됩니다 ( "<"는 입력 파일을 표시하여 출력 파일을 표시합니다). Reset 모드를 사용하여 foo.lzw를 생성하기 위해 foo.txt 파일을 압축하려면 다음을 실행할 수 있어야합니다.
java MyLZW - r < foo.txt > foo.lzw 유사하게 foo.lzw를 foo2.txt로 확장하려면 다음을 실행해야합니다.
java MyLZW + < foo.lzw > foo2.txt