โฮมเพจ » ทำอย่างไร » เหตุใด Zip จึงสามารถบีบอัดไฟล์เดี่ยวได้ดีกว่าหลาย ๆ ไฟล์ที่มีเนื้อหาเดียวกัน

    เหตุใด Zip จึงสามารถบีบอัดไฟล์เดี่ยวได้ดีกว่าหลาย ๆ ไฟล์ที่มีเนื้อหาเดียวกัน

    ความสามารถในการบีบอัดไฟล์ของเราเพื่อให้การแบ่งปันและ / หรือการขนส่งง่ายขึ้นสามารถทำให้ชีวิตอิเล็คทรอนิคส์ของเราง่ายขึ้นมาก แต่บางครั้งเราอาจเห็นผลลัพธ์ที่แปลกหรือไม่คาดคิดหลังจากเราบีบอัดไฟล์ ทำไมถึงเป็นอย่างนั้น? คำถาม & คำตอบ SuperUser ของวันนี้มีคำตอบสำหรับคำถามของผู้อ่านที่สับสน.

    เซสชั่นคำถามและคำตอบในวันนี้มาถึงเราด้วยความอนุเคราะห์จาก SuperUser - แผนกย่อยของ Exchange Exchange ซึ่งเป็นกลุ่มที่ขับเคลื่อนด้วยชุมชนของเว็บไซต์ถาม - ตอบ.

    ภาพถ่ายมารยาทของ Jean-Etienne Minh-Duy Poirrier (Flickr).

    คำถาม

    ผู้อ่าน SuperUser sixtyfootersdude ต้องการทราบว่าเหตุใด zip จึงสามารถบีบอัดไฟล์เดียวได้ดีกว่าหลาย ๆ ไฟล์ที่มีเนื้อหาประเภทเดียวกัน:

    สมมติว่าฉันมีไฟล์ XML 10,000 ไฟล์และต้องการส่งให้เพื่อน ก่อนที่จะส่งพวกเขาฉันต้องการที่จะบีบอัดพวกเขา.

    วิธีที่ 1: อย่าบีบอัดข้อมูลเหล่านั้น

    ผล:

    วิธีที่ 2: บีบอัดไฟล์ทุกไฟล์แยกจากกันและส่งไฟล์ XML ที่ซิป 10,000 ไฟล์ให้เขา

    คำสั่ง:

    ผล:

    วิธีที่ 3: สร้างไฟล์ซิปเดี่ยวที่มีไฟล์ XML ทั้งหมด 10,000 ไฟล์

    คำสั่ง:

    ผล:

    วิธีที่ 4: เชื่อมไฟล์เข้าด้วยกันเป็นไฟล์เดียวแล้วทำการซิป

    คำสั่ง:

    ผล:

    คำถาม

    • ทำไมฉันถึงได้ผลลัพธ์ที่ดีขึ้นอย่างมากเมื่อฉันเพิ่งซิปไฟล์เดียว?
    • ฉันคาดหวังว่าจะได้ผลลัพธ์ที่ดีขึ้นอย่างมากโดยใช้วิธีที่ 3 แทนที่จะเป็นวิธีที่ 2 แต่ฉันทำไม่ได้ ทำไมเป็นแบบนี้?
    • พฤติกรรมนี้ใช้เฉพาะกับรหัสไปรษณีย์หรือไม่ ถ้าฉันลองใช้ Gzip ฉันจะได้ผลลัพธ์ที่แตกต่างกันหรือไม่?

    ข้อมูลเพิ่มเติม

    ข้อมูลเมตา

    หนึ่งในคำตอบที่ระบุชี้ให้เห็นว่าความแตกต่างคือข้อมูลเมตาของระบบที่เก็บไว้ในไฟล์ zip ฉันไม่เชื่อว่านี่เป็นกรณี เพื่อทดสอบฉันทำต่อไปนี้:

    ไฟล์ zip ที่ได้คือ 1.4 MB ซึ่งหมายความว่ายังคงมีพื้นที่ที่ไม่ได้อธิบายประมาณสิบ MB.

    เหตุใด zip จึงสามารถบีบอัดไฟล์เดียวได้ดีกว่าหลายไฟล์ที่มีเนื้อหาประเภทเดียวกัน?

    คำตอบ

    Alan Shutko และ Aganju ผู้มีส่วนร่วมสูงสุดได้รับคำตอบสำหรับเรา ก่อนอื่น Alan Shutko:

    การบีบอัด Zip ขึ้นอยู่กับรูปแบบซ้ำ ๆ ในข้อมูลที่จะบีบอัดและการบีบอัดจะดีขึ้นเมื่อไฟล์ยาวขึ้นเนื่องจากสามารถพบและใช้รูปแบบได้มากขึ้น.

    ประยุกต์ได้ง่ายกว่าถ้าคุณบีบอัดไฟล์หนึ่งไฟล์พจนานุกรมที่แมปรหัส (สั้น) กับรูปแบบ (อีกต่อไป) จำเป็นต้องมีอยู่ในไฟล์ zip ที่ได้ หากคุณซิปไฟล์ยาวหนึ่งไฟล์พจนานุกรมจะถูก 'นำกลับมาใช้ใหม่' และจะมีประสิทธิภาพมากขึ้นในเนื้อหาทั้งหมด.

    หากไฟล์ของคุณคล้ายกันเล็กน้อย (ตามที่เป็นข้อความเสมอ) การนำ 'พจนานุกรม' กลับมาใช้ใหม่จะมีประสิทธิภาพมากและผลลัพธ์จะเป็นไฟล์ zip ทั้งหมดที่เล็กกว่ามาก.

    ตามด้วยคำตอบจาก Aganju:

    ในไฟล์ zip แต่ละไฟล์จะถูกบีบอัดแยกกัน สิ่งที่ตรงกันข้ามคือ การบีบอัดที่เป็นของแข็ง, นั่นคือไฟล์ถูกบีบอัดเข้าด้วยกัน 7-zip และ Rar ใช้การบีบอัดแบบ solid ตามค่าเริ่มต้น Gzip และ Bzip2 ไม่สามารถบีบอัดไฟล์ได้หลายไฟล์ดังนั้น Tar จะถูกใช้ก่อนมีผลเหมือนกับการบีบอัดที่เป็นของแข็ง.

    เนื่องจากไฟล์ xml มีโครงสร้างที่คล้ายกัน (และอาจมีเนื้อหาที่คล้ายกัน) หากไฟล์ถูกบีบอัดเข้าด้วยกันการบีบอัดจะสูงขึ้น.

    ตัวอย่างเช่นหากไฟล์มีสตริง“” และคอมเพรสเซอร์พบแล้วว่าสตริงในไฟล์อื่นมันจะแทนที่ด้วยตัวชี้ขนาดเล็กเพื่อการแข่งขันก่อนหน้า หากคอมเพรสเซอร์ไม่ได้ใช้การบีบอัดแบบแข็งการเกิดขึ้นครั้งแรกของสตริงในไฟล์จะถูกบันทึกเป็น ตามตัวอักษร, ซึ่งมีขนาดใหญ่กว่า.


    มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่ ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่.