2014-02-11 3 views
1

정적/사전 설정 사전 인 DEFLATE 알고리즘을 사용하여 인코딩 된 데이터로 올바른 gzip 파일 (표준 Linux gzip을 사용하여 압축 해제 할 수 있음)을 만들려고합니다.정적 사전을 사용하여 유효한 gzip을 만들 수 있습니까?

DEFLATEgzip에 대한 사양을 모두 읽었습니다. 불가능한 것처럼 보입니다.

  • 동적 사전 (슬라이딩 윈도우) 등으로 압축 블록 0 설정 FDICT 플래그 헤더로 시작 : I는 DEFLATE 명세서에서 얻을 같이 압축 데이터 블록에 대한 부호화의 두 종류가있다.
  • FDICT = 1

으로, 정적 (미리 사전)로 압축하지만 실제로 파일에 같은 사전을 작성하는 방법을 찾을 수 없습니다. 내 사전/사전에 일부 헤더를 추가하거나 다른 방법으로 gzip을 FDICT = 1으로 인코딩 된 데이터의 압축을 풀 수 있습니까?

P. Java의 Deflate 클래스를 사용하여이를 수행하려고하지만 이와 같은 방식으로 압축 된 블록의 actuall gzip 지원에 관심이 있습니다.

답변

3

두 개의 다른 개념이 서로 섞여있어, 어떤 말을하고 있는지 확실하지 않습니다.

매우 작은 양의 데이터를 압축 할 때 일반적으로 사용되는 정적 허프만 코드를 사용하는 deflate 블록이 있습니다. 일반적으로 동적 허프만 코드가 사용되며, 특정 블록에 대해 최적화 된 코드가 블록 시작 부분에 전송됩니다. 소량의 데이터 (예 : 100 바이트이면 해당 코드 설명의 오버 헤드가 출력 크기를 지배하게됩니다. 대신 정적 코드를 사용하므로 압축 비용을 줄이면서 오버 헤드를 피할 수 있습니다. 그러나 전반적으로 결과는 더 작습니다. 모든 수축 응용 프로그램 (gzip, zlib, png 등)은 모든 수축 블록 유형을 지원합니다.

다른 개념은 일치하는 문자열이 검색되는 슬라이딩 사전을 미리로드하는 32K 데이터 청크 인 미리 정의 된 사전입니다. 이는 zlib에서만 지원됩니다. gzip 스트림에 사전 정의 된 사전을 제공 할 수 없습니다. "deflate"에 대한 귀하의 링크는 실제로 FDICT가 정의 된 zlib 형식에 대한 링크입니다.

+0

고맙습니다! 이제 마지막으로 두 개의 분리 된 알고리즘이 있고 DEFLATE 출력에서 ​​다른 출력 (특히 LZ77 압축 데이터가 허프만 코딩을 사용하여 압축 됨)으로 파이프됩니다. 내가 언급 한 그 사전은 LZ77을위한 프리로드 슬라이딩 윈도우 였고 gzip은 unwrap 된 deflate 출력을 사용했지만 (zlib만이 FDICT를 지원했다. – dbolotin