דף הבית » איך ל » מדוע Zip מסוגל לדחוס קבצים בודדים טוב יותר מאשר קבצים מרובים עם תוכן זהה?

    מדוע Zip מסוגל לדחוס קבצים בודדים טוב יותר מאשר קבצים מרובים עם תוכן זהה?

    היכולת לדחוס את הקבצים שלנו כך שיהיה קל יותר לשתף אותם ו / או להעביר אותם יכולה להפוך את החיים האלקטרוניים שלנו לקלים יותר, אבל לפעמים אנו עשויים לראות תוצאות שינוי גודל מוזר או לא צפוי לאחר דחיסת אותם. למה? היום SuperUser Q & A פוסט יש את התשובות לשאלות של מבולבל הקורא.

    מפגש השאלות והתשובות של היום מגיע אלינו באדיבות SuperUser - חלוקה מחודשת של Stack Exchange, קיבוץ מונחה על ידי הקהילה של אתרי אינטרנט של Q & A.

    צילום באדיבות ז'אן אטיין Minh-Duy Poirrier (Flickr).

    השאלה

    SuperUser הקורא sixtyfootersdude רוצה לדעת למה zip הוא מסוגל לדחוס קבצים בודדים טוב יותר מאשר קבצים מרובים עם אותו סוג של תוכן:

    נניח שיש לי 10,000 קבצי XML ורוצה לשלוח אותם לחבר. לפני שליחתם, אני רוצה לדחוס אותם.

    שיטה 1: לא לדחוס אותם

    תוצאות:

    שיטה 2: Zip כל קובץ בנפרד ולשלוח לו 10,000 קבצי ZIP ZIP

    פקודה:

    תוצאות:

    שיטה 3: יצירת קובץ ZIP יחיד המכיל את כל 10,000 קבצי XML

    פקודה:

    תוצאות:

    שיטה 4: לשרשר את הקבצים לתוך קובץ יחיד ו Zip זה

    פקודה:

    תוצאות:

    שאלות

    • למה אני מקבל תוצאות כאלה דרמטיות יותר כאשר אני רק רוכס קובץ יחיד?
    • ציפיתי לקבל תוצאות טובות יותר באופן דרמטי בשיטה 3 ולא בשיטה 2, אבל אני לא. למה זה?
    • האם זה ספציפי התנהגות zip? אם ניסיתי באמצעות Gzip, הייתי מקבל תוצאות שונות?

    מידע נוסף

    מטא נתונים

    אחת התשובות שניתנו מציעה כי ההבדל הוא נתונים meta המערכת המאוחסן בקובץ zip. אני לא מאמין שזה יכול להיות כך. כדי לבדוק את זה, עשיתי את הפעולות הבאות:

    קובץ ה- zip שנוצר הוא 1.4 MB. משמעות הדבר היא כי עדיין יש בערך 10 מגה של שטח לא מוסבר.

    למה zip מסוגל לדחוס קבצים בודדים טוב יותר מאשר קבצים מרובים עם אותו סוג של תוכן?

    התשובה

    לתורמים של סופר-אסר, אלן שוטקו ואגאנו, יש את התשובה עבורנו. ראשון למעלה, אלן Shutko:

    דחיסת ה- Zip מבוססת על תבניות חוזרות בנתונים כדי לדחוס, והדחיסה משתפרת ככל שהקובץ ארוך יותר, שכן ניתן למצוא דפוסים רבים יותר ויותר.

    פשוט, אם אתה דוחס קובץ אחד, המילון הממפה קודים (קצרים) לדפוסים (ארוכים יותר) נכלל בהכרח בכל קובץ zip שנוצר; אם אתה רוכס קובץ אחד ארוך, המילון הוא "שימוש חוזר" וגדל אפילו יעיל יותר על פני כל התוכן.

    אם הקבצים שלך הם קצת דומים (כמו תמיד טקסט), שימוש חוזר של "מילון" הופך להיות מאוד יעיל והתוצאה היא קובץ קטן יותר zip.

    ואחריו התשובה של Aganju:

    ב- zip, כל קובץ דחוס בנפרד. ההפך הוא דחיסה מוצקה, כלומר, קבצים דחוסים יחד. 7-zip ו- Rar להשתמש דחיסה מוצק כברירת מחדל. Gzip ו- Bzip2 לא יכולים לדחוס קבצים מרובים, כך טאר משמש הראשון, בעל אותו אפקט כמו דחיסה מוצקה.

    כמו קבצי XML יש מבנה דומה (וכנראה תוכן דומה), אם הקבצים דחוסים יחד ואז דחיסה יהיה גבוה יותר.

    לדוגמה, אם קובץ מכיל את המחרוזת ""והמדחס כבר מצא כי מחרוזת בקובץ אחר, זה יחליף אותו עם מצביע קטן למשחק הקודם. אם המדחס אינו משתמש בדחיסה מוצקה, ההתרחשות הראשונה של המחרוזת בקובץ תירשם כ מילולי, שהוא גדול יותר.


    יש לך משהו להוסיף להסבר? נשמע את ההערות. רוצה לקרוא תשובות נוספות ממשתמשים אחרים בעלי ידע טכנולוגי מתמצא? בדוק את נושא הדיון המלא כאן.