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


948

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

답변:


2476

짧은 형식:

.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를 사용하여 시간에 미치는 영향을 다소 완화합니다.


113
이 게시물에는 사람들이이 게시물을 정보 출처로 참조하려는 경우 인용 정보를 추가해야 할 정도로 많은 역사와 정보가 담겨 있습니다. 이 정보가 Wikipedia와 같은 인용으로 어딘가에 반영되어 있지만, 이와 유사한 인용 연구에 대한 링크가 인정 될 것입니다.
ThorSummoner

1348
나는 그 모든 것의 일부였던 참조입니다. 이 게시물은 Wikipedia에서 원본 소스로 인용 될 수 있습니다.
Mark Adler

524
참고 : Mark Adler는 미국 소프트웨어 엔지니어이며 우주 탐사에 크게 관여했습니다. 그는 데이터 압축 분야에서 Adler-32 체크섬 기능의 저자로서 zlib 압축 라이브러리와 gzip의 공동 저자로 가장 잘 알려져 있습니다. 그는 Info-ZIP에 공헌했으며 PNG (Portable Network Graphics) 이미지 형식 개발에 참여했습니다. 애들러는 또한 화성 탐사 로버 임무의 정신 크루즈 임무 관리자였습니다. (wikipedia)
아이작 핸슨

99
gzip은 유닉스 압축을 대체하기 위해 만들어졌습니다. zip은 여러 가지 이유로 유닉스에서 tar + gzip보다 우수 하지 않습니다 . ( .tar.gz파일 을 볼 때 그게 전부입니다.) 첫째, tar + gzip은 다음 파일을 압축 할 때 이전 파일의 히스토리를 사용할 수 있기 때문에 zip보다 낫습니다. zip은 파일을 개별적으로 만 압축 할 수 있습니다. 둘째, tar는 모든 Unix 디렉토리 정보를 보존하지만 zip은 그렇게하지 않았습니다. (유닉스 고유의 추가 블록이있는 zip 형식의 확장은이 문제를 해결하려고 시도합니다.)
Mark Adler

85
형식이 구현과 혼동되는 것 같습니다. 수축 형식 의 7-Zip 구현 은 매우 동일한 수축 형식으로 gzip보다 2 % ~ 10 % 더 나은 압축률을 얻을 수 있습니다 (CPU 시간이 많이 소요됨). 7z LZMA2 형식 은 40 % 향상된 압축률을 제공합니다.
Mark Adler

43

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

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

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


28

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

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

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


8
당신은 요점을 과장하고 있습니다. 사람들이 랜덤 액세스 압축 아카이브를 원하면 ".tar.gz"파일 대신 ".gz.tar"파일을 만들 수 있습니다. 대부분의 사람들은 랜덤 액세스에 관심이 없기 때문에 그렇지 않습니다. .warc.gz 웹 아카이빙 형식에는 큰 커뮤니티가 있으며 무작위 액세스가 필요하므로 각 웹 페이지를 개별적으로 압축합니다. Internet Archive Wayback Machine에서 웹 페이지를 볼 때마다이 형식을 사용합니다.
Greg Lindahl

2
tar 형식은 해당 항목에 임의로 액세스 할 수 없으므로 ".gz.tar"는 임의 액세스를 제공하지 않습니다. 원하는 특정 항목 하나를 얻으려면 처음부터 모든 항목을 거쳐야합니다. 더 나쁜 것은 동일한 파일이 여러 위치에 여러 번 (여러 버전으로) 아카이브 될 수 있기 때문에 끝까지 모든 항목을 거쳐야합니다. 동일한 아카이브에서-항목별로 전체 아카이브 항목을 읽는 것을 제외하고는이를 알아낼 수있는 방법이 없습니다.
Min-Soo Pipefeet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.