האלגוריתמים Gzip ו-Zlib משמשים בדרך כלל לדחיסת ופירוק קבצים. Gzip משמש בעיקר לדחיסת קבצים בודדים, בעוד Zlib דוחס בעיקר זרמי נתונים. האלגוריתמים משתמשים באלגוריתם Deflate Compression לדחיסה, אם כי Gzip מספק תכונות נוספות כולל בדיקת שגיאות ומטא נתונים של קבצים.
Gzip סיפק יחסי דחיסה טובים יותר מאשר Zlib. עם זאת, Gzip דורש כוח עיבוד רב יותר כדי לדחוס ולפרוק נתונים. ברוב המקרים, עליך להשתמש ב-Gzip עבור דחיסת קבצים וב-Zlib עבור דחיסת זרמי נתונים.
Go מספקת את הפונקציונליות לדחיסת נתונים, כולל קבצים דרך לִדחוֹס חֲבִילָה.
חבילת הדחיסה
ה לִדחוֹס החבילה תומכת בדחיסת נתונים דרך דחיסה/gzip ו compress/zlib חבילות, בין שאר הפונקציות.
ה gzip החבילה תומכת בדחיסה וביטול דחיסה של נתוני פורמט הקובץ gzip, כולל פעולות קריאה וכתיבה כמפורט ב- RFC 1952. בזמן ש zlib החבילה עוזרת בדחיסה ופירוק נתונים בפורמט zlib.
אתה יכול לייבא gzip ו zlib מ ה לִדחוֹס חבילה באמצעות יְבוּא מילת מפתח.
יְבוּא (
"דחיסה/gzip"// ייבוא gzip
"דחיסה/זליב"// ייבוא zlib
)
דחיסה וביטול דחיסה של קבצים עם Gzip
Gzip הוא פורמט קובץ ויישום תוכנה לדחיסה ופירוק קבצים. Gzip משתמש באלגוריתם השרשרת למפל-זיו-מרקוב (LZ77) כדי לדחוס נתונים, והאלגוריתם משמש לעתים קרובות לדחיסת קבצי טקסט, כגון קובצי HTML, CSS או JavaScript.
תהליך דחיסת קבצים עם ה gzip החבילה פשוטה ואינטואיטיבית. יהיה עליך לפתוח את הקובץ, ליצור קובץ gzip, ליצור סופר gzip ולהעתיק את המקור התוכן של הקובץ לכותב gzip לפני פעולת ההדחה שמבטיחה שתהליך הכתיבה הוא לְהַשְׁלִים.
תרוץ את זה פקודת bash במסוף של ספריית העבודה שלך במערכות Unix כדי ליצור קובץ טקסט לדוגמה ולאחר מכן להוסיף טקסט לקובץ.
// יוצר קובץ טקסט.
גע ב-example.txt
// מעביר את המחרוזת לקובץ
הד 'שלום, עולם!' > example.txt}
לאחר יצירת הקובץ והוספת הטקסט, תוכל לייבא את הקובץ gzip, io, ו OS חבילות עבור פעולת הדחיסה.
הנה איך אתה יכול להשתמש ב דחיסה/gzip חבילה לדחיסת קובץ טקסט.
יְבוּא (
"דחיסה/gzip"
"io"
"os"
)funcרָאשִׁי() {
// פתח את הקובץ המקורי
originalFile, err := os. לִפְתוֹחַ("example.txt")
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת originalFile. סגור()// צור קובץ gzip חדש
gzippedFile, שגיאה := os. לִיצוֹר("example.txt.gz")
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת gzippedFile. סגור()// צור כותב gzip חדש
gzipWriter := gzip. NewWriter (gzippedFile)
לִדחוֹת gzipWriter. סגור()// העתק את תוכן הקובץ המקורי לכותב gzip
_, שגיאה = io. העתק (gzipWriter, originalFile)
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
// שטף את כותב ה-gzip כדי לוודא שכל הנתונים נכתבים
gzipWriter. סומק()
}
ה לִפְתוֹחַ פונקציה של OS החבילה פותחת את קובץ הטקסט, וה- סגור הפונקציה סוגרת את הקובץ עם a לִדחוֹת הַצהָרָה. ה לִיצוֹר הפונקציה יוצרת קובץ gzipped, וה- NewWriter פונקציה של gzip החבילה כותבת את התוכן של קובץ הטקסט לקובץ gzip באמצעות ה- עותק פונקציה של io חֲבִילָה.
ה סומק שיטת ה gzipWriter מופע מסיר את כותב ה-gzip ברגע שכל הנתונים זמינים בקובץ הדחוס.
אתה יכול לאחזר את הקובץ המקורי מקובץ gzip עם תהליך ביטול דחיסה. תהליך פירוק קובץ דומה; תפתח את הקובץ ותיצור קורא קבצים gzip, ולאחר מכן צור קובץ חדש שיכיל את הנתונים הלא דחוסים לפני העתקת התוכן לקובץ החדש.
יְבוּא (
"דחיסה/gzip"
"io"
"os"
)funcרָאשִׁי() {
// פתח את הקובץ gzipped
gzippedFile, שגיאה := os. לִפְתוֹחַ("example.txt.gz")
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת gzippedFile. סגור()// צור קורא gzip חדש
gzipReader, שגיאה := gzip. NewReader (gzippedFile)
לִדחוֹת gzipReader. סגור()// צור קובץ חדש כדי להחזיק את הנתונים הלא דחוסים
uncompressedFile, שגיאה := os. לִיצוֹר("example.txt")
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת uncompressedFile. סגור()
// העתק את התוכן של קורא gzip לקובץ החדש
_, שגיאה = io. העתק (uncompressedFile, gzipReader)
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
}
ה לִפְתוֹחַ פונקציה של OS החבילה פותחת את הקובץ gzipped, וה- NewReader פונקציה של gzip החבילה קוראת את הקובץ הדחוס. ה לִיצוֹר פונקציה של OS החבילה יוצרת קובץ טקסט חדש. ה עותק הפונקציה מעתיקה את התוכן של gzipReader אל ה uncompressedFile.
דחיסה וביטול דחיסה של נתונים עם Zlib
Zlib היא ספריה לדחיסת נתונים ופירוק; הספרייה משתמשת גם באלגוריתם LZ77. Zlib כתוב ב-C ונמצא בשימוש נרחב כבסיס לספריות ותוכנות דחיסה אחרות. בניגוד gzip, zlib היא ספריה, ו zlib אינו כולל א פורמט קובץ. עם זאת, הוא משמש לעתים קרובות כדי לדחוס נתונים המאוחסנים בפורמטים של מיכל, כגון PNG או HTTP.
תהליך הדחיסה עם zlib זהה לזה של gzip. אתה תיצור קובץ zlib, תגדיר כותב, תפתח את הקובץ המקורי ותעתיק את התוכן לקובץ הדחוס.
יְבוּא (
"דחיסה/זליב"
"io"
"os"
)funcרָאשִׁי() {
// צור קובץ חדש "example.zlib"
קובץ, שגיאה := os. לִיצוֹר("example.zlib")
// אם מתרחשת שגיאה, פאניקה והפסק את התוכנית
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
// ודא שהקובץ נסגר לאחר שהפונקציה חוזרת
לִדחוֹת קוֹבֶץ. סגור()// צור כותב zlib חדש עם רמת הדחיסה הטובה ביותר
סופר, טעות := zlib. NewWriterLevel (קובץ, zlib. BestCompression)
// אם מתרחשת שגיאה, פאניקה והפסק את התוכנית
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
// ודא שהסופר סגור לאחר שהפונקציה חוזרת
לִדחוֹת סוֹפֵר. סגור()// פתח את קובץ הקלט "example.txt"
inputFile, err := os. לִפְתוֹחַ("example.txt")
// אם מתרחשת שגיאה, פאניקה והפסק את התוכנית
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
// ודא שקובץ הקלט נסגר לאחר שהפונקציה חוזרת
לִדחוֹת inputFile. סגור()
// העתק את תוכן קובץ הקלט לכותב
io. העתק (כותב, קובץ קלט)
}
ה לִיצוֹר השיטה יוצרת את קובץ zlib, ואת NewWriterLevel function יוצרת כותב עבור הקובץ עם האפשרות שצוינה (במקרה זה, ה BestCompression אוֹפְּצִיָה). ה לִפְתוֹחַ שיטת ה OS החבילה פותחת את קובץ הטקסט, וה- עותק פונקציה של io החבילה מעתיקה את תוכן קובץ הטקסט לקובץ zlib בתהליך הדחיסה.
כדי לפרוק את קובץ zlib, תצטרך לפתוח את הקובץ הדחוס, ליצור קורא zlib חדש, ולאחר מכן להעתיק לבסוף את תוכן הקורא לפלט סטנדרטי.
יְבוּא (
"דחיסה/זליב"
"io"
"os"
)funcרָאשִׁי() {
// פתח את הקובץ הדחוס "compressed_file.zlib"
קובץ, שגיאה := os. לִפְתוֹחַ("compressed_file.zlib")
// אם מתרחשת שגיאה, פאניקה והפסק את התוכנית
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
// ודא שהקובץ נסגר לאחר שהפונקציה חוזרת
לִדחוֹת קוֹבֶץ. סגור()// צור קורא zlib חדש עבור הקובץ הדחוס
קורא, טעות := zlib. NewReader (קובץ)
// אם מתרחשת שגיאה, פאניקה והפסק את התוכנית
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
// ודא שהקורא סגור לאחר שהפונקציה חוזרת
לִדחוֹת קוֹרֵא. סגור()
// העתק את תוכן הקורא לפלט הסטנדרטי
io. העתק (os. Stdout, קורא)
}
הפונקציה הראשית פותחת את קובץ zlib עם ה- OS של החבילה לִפְתוֹחַ פונקציה, ואת NewReader פונקציה של zlib החבילה קוראת את קובץ zlib לתוך מופע קורא. ה עותק שיטת ה io החבילה מעתיקה את התוכן מהקורא לפלט הסטנדרטי (במקרה זה, הקונסולה).
כתיבת קוד לדחיסת קבצים שימושית עבור אוטומציה של משימות ודחיסת מספר קבצים. אם אתה רק צריך לדחוס כמה קבצים, אתה יכול להשתמש ביישומים כמו WinRar, WinZip, Express Zip ו-Bandizip.