Zip이 동일한 내용의 여러 파일보다 단일 파일을 더 잘 압축 할 수있는 이유는 무엇입니까?

0
313

zip-compresses-single-files-여러 파일보다 낫습니다-동일한 내용 -00

파일을 공유 및 / 또는 전송하기 쉽도록 파일을 압축 할 수 있으면 전자 생활이 훨씬 쉬워 질 수 있지만 압축 후 이상한 또는 예기치 않은 크기 조정 결과가 나타날 수 있습니다. 왜 그런가요? 오늘의 수퍼 유저 Q & A 게시물에는 혼란스런 독자의 질문에 대한 답변이 있습니다.

오늘의 질문 및 답변 세션은 커뮤니티 중심의 Q & A 웹 사이트 그룹 인 Stack Exchange의 하위 부문 인 SuperUser에 의해 제공됩니다.

Jean-Etienne Minh-Duy Poirrier (Flickr)의 사진 제공.

질문

SuperUser reader sixtyfootersdude는 zip이 동일한 유형의 컨텐츠를 가진 여러 파일보다 단일 파일을 더 잘 압축 할 수있는 이유를 알고 싶어합니다.

10,000 개의 XML 파일이 있고이를 친구에게 보내려고한다고 가정하십시오. 보내기 전에 압축하고 싶습니다.

방법 1 : 압축하지 마십시오

결과 :

zip-compresses-single-files-여러 파일보다 낫습니다-동일한 내용이있는 -01

방법 2 : 모든 파일을 별도로 압축하여 10,000 개의 압축 된 XML 파일 전송

명령:

zip-compresses-single-files-여러 파일보다 낫다-동일한 내용이있는 -02

결과 :

zip-compresses-single-files-여러 파일보다 낫다-동일한 내용 -03

방법 3 : 모든 10,000 XML 파일이 포함 된 단일 Zip 파일 만들기

명령:

zip-compresses-single-files-여러 파일보다 낫다-동일한 내용이있는 -04

결과 :

zip-compresses-single-files-여러 파일보다 낫다-동일한 내용 -05

방법 4 : 파일을 단일 파일로 연결하고 압축

명령:

zip-compresses-single-files-여러 파일보다 낫습니다-동일한 내용 -06

결과 :

zip 압축은 단일 파일보다 여러 파일보다 낫습니다.

질문

  • 단일 파일을 압축 할 때 왜 이렇게 뛰어난 결과를 얻습니까?
  • 방법 2 대신 방법 3을 사용하여 훨씬 더 나은 결과를 얻을 것으로 기대했지만 그렇지 않았습니다. 왜 이런거야?
  • 이 동작은 zip에만 해당됩니까? Gzip을 사용하려고하면 다른 결과가 나옵니까?

추가 정보

zip-compresses-single-files-여러 파일보다 낫습니다-동일한 내용 -08

메타 데이터

주어진 답변 중 하나는 차이점이 zip 파일에 저장된 시스템 메타 데이터라는 것을 나타냅니다. 나는 이것이 사실 일 수 있다고 생각하지 않는다. 그것을 테스트하기 위해 다음을 수행했습니다.

zip 압축은 단일 파일보다 여러 파일보다 낫습니다.

결과 zip 파일은 1.4MB입니다. 이는 여전히 설명 할 수없는 공간이 약 10MB라는 것을 의미합니다.

zip이 동일한 유형의 컨텐츠를 가진 여러 파일보다 단일 파일을 더 잘 압축 할 수있는 이유는 무엇입니까?

대답

수퍼 유저 기고자 Alan Shutko와 Aganju가 우리에게 답을드립니다. 먼저 Alan Shutko :

Zip 압축은 압축 할 데이터의 반복적 인 패턴을 기반으로하며, 더 많은 패턴을 찾아서 사용할 수 있으므로 파일이 길수록 압축 성능이 향상됩니다.

단순화 된 파일 하나를 압축하면 (짧은) 코드를 (더 긴) 패턴으로 매핑하는 사전이 각 결과 zip 파일에 포함되어야합니다. 하나의 긴 파일을 압축하면 사전이 '재사용'되며 모든 콘텐츠에서 훨씬 더 효과적입니다.

파일이 텍스트와 마찬가지로 약간 유사하다면 '사전'을 재사용하는 것이 매우 효율적이되어 결과적으로 전체 zip 파일이 훨씬 작아집니다.

Aganju의 답변이 이어집니다.

zip에서는 각 파일이 개별적으로 압축됩니다. 반대는 확실한 압축즉, 파일이 함께 압축됩니다. 7-zip 및 Rar는 기본적으로 견고한 압축을 사용합니다. Gzip 및 Bzip2는 여러 파일을 압축 할 수 없으므로 Tar이 먼저 사용되며 솔리드 압축과 동일한 효과가 있습니다.

xml 파일은 구조가 비슷하고 내용이 비슷하기 때문에 파일을 함께 압축하면 압축률이 높아집니다.

예를 들어 파일에 문자열 “<요소 이름 =”에서 컴프레서는 이미 다른 파일에서 해당 문자열을 찾았으며 이전 일치하는 작은 포인터로 대체합니다. 컴프레서가 솔리드 압축을 사용하지 않으면 파일에서 처음으로 나타나는 문자열이 오자더 큽니다.


설명에 추가 할 것이 있습니까? 주석에서 소리를냅니다. 기술에 정통한 다른 Stack Exchange 사용자의 답변을 더 원하십니까? 여기에서 전체 토론 스레드를 확인하십시오.