[compression] zlib, gzip 및 zip은 어떤 관련이 있습니까? 공통점이 무엇이며 어떻게 다릅니 까?

zlib에 사용 된 압축 알고리즘 은 본질적으로 gzipzip 의 압축 알고리즘 과 동일 합니다. gzipzip 은 무엇입니까 ? 그것들은 어떻게 다르며 어떻게 동일합니까?



답변

짧은 형식:

.zip일반적으로 Deflate 압축 방법을 사용 하는 아카이브 형식 입니다. .gzGZIP 형식 도위한 수축 압축 방법을 사용하여 단일 파일이다. 종종 GZIP와 함께 사용되는 압축 된 아카이브 형식을 만들기 위해 타르 , .tar.gz. ZLIB 라이브러리 위한 수축 압축 및 압축 해제 ZIP, GZIP 의한 사용을위한 코드를 제공 PNG (용도 ZLIB 랩퍼 DEFLATE에 데이터)를, 그리고 다른 많은 애플리케이션.

긴 형태 :

ZIP 형식은 자신의 구현, PKZIP은, 셰어웨어이었다 열린 사양과 오픈 형식으로 필 캐츠에 의해 개발되었다. 파일과 디렉토리 구조를 저장하는 아카이브 형식으로 각 파일이 개별적으로 압축됩니다. 파일 형식은 .zip입니다. 디렉토리 구조뿐만 아니라 파일도 선택적으로 암호화 할 수 있습니다.

ZIP 형식은 여러 가지 압축 방법을 지원합니다.

0 - The file is stored (no compression)
1 - The file is Shrunk
2 - The file is Reduced with compression factor 1
3 - The file is Reduced with compression factor 2
4 - The file is Reduced with compression factor 3
5 - The file is Reduced with compression factor 4
6 - The file is Imploded
7 - Reserved for Tokenizing compression algorithm
8 - The file is Deflated
9 - Enhanced Deflating using Deflate64(tm)
10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
11 - Reserved by PKWARE
12 - File is compressed using BZIP2 algorithm
13 - Reserved by PKWARE
14 - LZMA (EFS)
15 - Reserved by PKWARE
16 - Reserved by PKWARE
17 - Reserved by PKWARE
18 - File is compressed using IBM TERSE (new)
19 - IBM LZ77 z Architecture (PFS)
97 - WavPack compressed data
98 - PPMd version I, Rev 1

방법 1 ~ 7은 역사적이며 사용되지 않습니다. 방법 9 내지 98은 비교적 최근에 추가 된 것이며, 소량의 사용이 다양하다. ZIP 형식에서 실제로 널리 사용되는 유일한 방법은 방법 8, Deflate 및 약간 작은 방법 0이며, 전혀 압축되지 않습니다. 실제로 .zip여러분이 접하게 될 모든 파일은 방법 8과 방법 8 만 사용합니다. 방법 8은 압축없이 비교적 적은 확장으로 데이터를 효과적으로 저장하는 방법을 가지고 있으며 방법 0은 스트리밍 할 수 없습니다 방법 8도 가능합니다.)

파일 컨테이너ISO / IEC 21320-1 : 2015 표준 은 Java 아카이브 파일 (.jar), Office Open XML 파일 (Microsoft Office .docx, .xlsx, .pptx), Office 문서에 사용되는 것과 같은 제한된 zip 형식입니다. 파일 형식 (.odt, .ods, .odp) 및 EPUB 파일 (.epub) 이 표준은 압축 방법을 0과 8로 제한하며 암호화 나 서명이없는 등의 다른 제약 조건을 제한합니다.

Info-ZIP 그룹 은 1990 년 경 에 Deflate 형식으로 압축하고 압축을 풀고 이전 형식으로 압축을 지원하는 이식 가능한 무료 오픈 소스 구현 zipunzip유틸리티를 작성했습니다. 이것은 .zip형식 의 사용을 크게 확장했습니다 .

90 년대 초 gzip 형식 은 Info-ZIP 유틸리티의 Deflate 코드에서 파생 된 Unix compress유틸리티를 대체하기 위해 개발되었습니다 . Unix compress.Z파일 이름에 a 를 추가하여 단일 파일 또는 스트림을 압축하도록 설계되었습니다 . LZW 압축 알고리즘을compress 사용합니다.이 알고리즘 은 당시 특허를 받았으며 무료 사용은 특허 보유자가 분쟁을 겪었습니다. Deflate의 일부 특정 구현은 Phil Katz에 의해 특허를 받았지만 형식은 아니므로 어떤 특허도 침해하지 않는 Deflate 구현을 작성할 수있었습니다. 이 구현은 지난 20 년 동안 그다지 도전받지 않았습니다. 유닉스 gzip유틸리티는compress실제로 압축 된 compress데이터 를 압축 해제 할 수 있습니다 (해당 문장을 구문 분석 할 수 있다고 가정). 파일 이름 gzip에 a .gz를 추가합니다 . gzipDeflate 압축 데이터 형식을 사용합니다.이 형식은 Unix보다 압축률이 훨씬 뛰어나고 압축 compress이 매우 빠르며 CRC-32를 데이터 무결성 검사로 추가합니다. 헤더 형식을 사용하면 compress원래 파일 이름 및 파일 수정 시간과 같이 허용 된 형식 보다 많은 정보를 저장할 수 있습니다.

compress단일 파일 만 압축 하지만 tar유틸리티를 사용하여 파일, 속성 및 디렉토리 구조의 아카이브를 단일 .tar파일로 만든 다음 압축 compress하여 .tar.Z파일 을 만드는 것이 일반적 이었습니다. 실제로 tar유틸리티했고 여전히 대신에 파이프의 출력 필요없이 같은 시간에 압축을 할 수있는 옵션이 tar로를 compress. 이것은 모두 gzip 형식으로 이월되었으며 형식으로 tar직접 압축하는 옵션이 있습니다 .tar.gz. tar.gz형식은 더 이상 압축 .zipa의 압축 이후, 접근 .tar, 파일을 통해 특히 많은 작은 파일을 중복을 활용할 수 있습니다. .tar.gz인해 매우 높은 휴대 성으로 유닉스에서 사용하는 가장 일반적인 아카이브 형식이지만 종종 볼 수 있도록보다 효과적인 압축 방법뿐만 아니라 사용이 있습니다 .tar.bz2.tar.xz아카이브.

와 달리 .tar, .zip마지막에 중앙 디렉토리가 있으며, 이는 컨텐츠 목록을 제공합니다. 그와 별도의 압축은 .zip파일 의 개별 항목에 대한 임의 액세스를 제공 합니다. .tar파일을 압축 해제하고 어떻게 디렉토리 구축하기 위해 시작부터 끝까지 스캔해야 .tar파일이 나열됩니다.

1990 년대 중반 쯤 gzip이 도입 된 직후, 동일한 특허 분쟁이 .gif게시판과 월드 와이드 웹 (당시 새로운 것)에서 널리 사용되는 이미지 형식 의 무료 사용에 의문을 제기했습니다 . 따라서 작은 그룹 .png이 대체 할 파일 형식으로 PNG 무손실 압축 이미지 형식을 만들었습니다 .gif. 이 형식은 압축에 Deflate 형식을 사용하는데,이 형식은 이미지 데이터의 필터가 중복성을 더 많이 노출 한 후에 적용됩니다. PNG 형식의 광범위한 사용을 촉진하기 위해 두 개의 무료 코드 라이브러리가 작성되었습니다. libpngzlib. libpng는 PNG 형식의 모든 기능을 처리했으며 zlib는 libpng 및 다른 응용 프로그램에서 사용할 압축 및 압축 해제 코드를 제공했습니다. zlib는 gzip코드 에서 수정되었습니다 .

언급 된 모든 특허는 만료되었습니다.

zlib 라이브러리는 수축 압축 및 압축 해제와 수축 스트림 주위에 3 가지 종류의 줄 바꿈을 지원합니다. 그것들은 : 랩핑이 전혀 없음 ( “원시”수축), zlib 랩핑 PNG 형식 데이터 블록에서 사용되는 및 gzip 래핑은 프로그래머에게 gzip 루틴을 제공합니다. zlib와 gzip 줄 바꿈의 주요 차이점은 zlib 줄 바꿈이 gzip의 경우 최소 18 바이트에 비해 6 바이트가 작고 무결성 검사 인 Adler-32가 gzip이 사용하는 CRC-32보다 더 빠르다는 것입니다. Raw deflate는 .zip형식 을 읽고 쓰는 프로그램에서 사용되며 , 이는 압축 된 압축 데이터를 감싸는 또 다른 형식입니다.

zlib는 현재 데이터 전송 및 저장에 널리 사용되고 있습니다. 예를 들어, 대부분의 서버와 브라우저 트랜잭션 특히 HTTP 헤더, ZLIB 압축을 이용하여 압축 해제 된 데이터를 HTTP Content-Encoding: deflate수단 Zlib의 데이터 포맷 안에 싸여 DEFLATE 압축 방법을 .

수축 시간을 다르게 구현하면 CPU 시간에 대한 압축 효율성을 상쇄 할 수있는 선택 가능한 압축 수준이 존재한다는 사실을 알 수 있듯이 동일한 입력 데이터에 대해 다른 압축 출력이 발생할 수 있습니다. zlib 및 PKZIP만이 수축 압축 및 압축 해제 구현은 아닙니다. 모두 7-ZIP 아카이브 유틸리티 와 구글의 zopfli 라이브러리 폐의 형식을 사용하여 가능한 경우 지난 몇 비트를 집어 넣은하기 위해 ZLIB보다 훨씬 더 많은 CPU 시간을 사용할 수있는 능력을 가지고, 몇 %까지 압축 된 크기를 감소 ZLIB 최고에 비해 압축 수준. 그만큼pigz 유틸리티gzip의 병렬 구현은 zlib (압축 레벨 1-9) 또는 zopfli (압축 레벨 11)를 사용하는 옵션을 포함하며, 대용량 파일의 압축을 여러 프로세서 및 코어로 분할하여 zopfli를 사용하여 시간에 미치는 영향을 다소 완화합니다.


답변

ZIP 은 임의의 수의 파일과 폴더를 무손실 압축과 함께 저장하는 데 사용되는 파일 형식입니다. 사용 된 압축 방법에 대한 엄격한 가정은 없지만 DEFLATE 와 함께 가장 자주 사용됩니다 .

Gzip 은 DEFLATE에 기반한 압축 알고리즘이지만 잠재적 특허 등은 적지 않으며 단일 압축 파일을 저장하기위한 파일 형식입니다. tar 와 결합 될 때 임의의 수의 파일 및 폴더 압축을 지원합니다 . 결과 파일의 확장명이 .tgz또는 .tar.gz그리고 일반적이라고 타르볼 .

zlib 는 가장 일반적인 LZ77 구현 에서 DEFLATE를 캡슐화하는 함수 라이브러리입니다 .


답변

가장 중요한 차이점은 gzip은 단일 파일 만 압축 할 수 있고 zip은 여러 파일을 하나씩 압축하여 나중에 하나의 파일로 아카이브한다는 것입니다. 따라서 gzip은 대부분 tar와 함께 제공됩니다 (그러나 다른 가능성이 있습니다). 이것은 몇 가지 단점과 함께 제공됩니다.

큰 아카이브가 있고 그중 하나의 파일 만 필요한 경우 전체 gzip 파일을 압축 해제하여 해당 파일을 가져와야합니다. zip 파일이있는 경우 필요하지 않습니다.

반면에 10 개의 유사하거나 동일한 파일을 압축하면 각 파일이 개별적으로 압축되기 때문에 zip 아카이브가 훨씬 더 커지는 반면, gzip에서는 tar와 함께 단일 파일이 압축되므로 파일이 비슷한 (동일).


답변