2017-03-21 14 views
-6

gzip으로 파일을 압축 할 수 있습니까? 이 경우 어떻게됩니까? 아카이브에 여전히 DEFLATE 스트림이 포함되어 있습니까? 프로그램에서이 특별한 경우를 처리해야합니다.gzip은 zip과 같은 파일 만 저장하고 압축하지 않을 수 있습니까?

+0

왜 그냥 테스트하지 않는가? (예 : 이미 압축 된 데이터와 함께'-1' 또는'--fast' 옵션 사용) – Makyen

+0

최종 투표 결과를 공개하기로 결정한 사람은 OP가 Meta에 게시하기로 결정한 질문에 대해 필요한 모든 정보를 편집해야합니다. - https://meta.stackoverflow.com/questions/346135/question-closed-as-belonging 투표를하기 전에 수퍼 유저이지만 프로그래밍 문제는 아닙니다. –

+1

@AlexeiLevenkov 요청대로. user1095108, 나는 그 질문에 대한 정의를하기를 바란다. 내가 편집 한 내용에 동의하지 않으면 롤백하는 방법을 알고 있다고 생각합니다. –

답변

2

예, 파일이 압축되어 있지 않은 경우 (예 : 압축 된 경우) gzip은 일부 헤더와 트레일러가 추가 된 소스 데이터가 포함 된 저장된 블록을 만듭니다.

필요한 경우 비 압축 스트림을 만들 수 있습니다. RFC 1951 섹션 3.2.3 및 3.2.4는 어떻게 완료되는지 설명합니다.

Deflate 저장된 블록은 기본적으로 값이 0x00 또는 0x01 (BTYPE = 00 및 BFINAL = 0,1) 인 단일 바이트이며, 그 뒤에 4 바이트의 LEN 및 NLEN과 실제 데이터가옵니다. LEN은 데이터 바이트 수 (2^16 = 64KB)이며 NLEN은 1의 보수입니다. 64KB가 넘는 경우이 작업을 여러 번 수행해야합니다. 마지막 블록은 BFINAL 비트를 1로 설정해야합니다.

마지막으로 gzip 헤더 RFC 1952를 앞에 붙이면됩니다 (GZIP 스트림이라고 가정하고 그렇지 않으면 ZLIB에 RFC 1950을 확인하십시오). 헤더에는 파일 이름, 타임 스탬프 등이 포함되어 있습니다. 몇 시간 씩 작업 할 수 있습니다. 대부분의 시간은 사양을 이해하는 데 소요됩니다.

+0

gzip 사양을 이해하지만 수축을 모릅니다. – user1095108

+0

Gzip에 Deflate가 포함되어 있습니다. Gzip은 Deflate 주변의 머리글과 트레일러의 래퍼입니다. –

+0

그 정도는 알고 있습니다, 감사합니다. – user1095108