القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة. اقرأ أكثر.

تُستخدم خوارزميات Gzip و Zlib بشكل شائع لضغط الملفات وفك ضغطها. يستخدم Gzip بشكل أساسي لضغط الملفات الفردية ، بينما يضغط Zlib بشكل أساسي تدفقات البيانات. تستخدم الخوارزميات خوارزمية Deflate Compression للضغط ، على الرغم من أن Gzip يوفر ميزات إضافية بما في ذلك التحقق من الأخطاء والبيانات الوصفية للملف.

قدم Gzip نسب ضغط أفضل من Zlib. ومع ذلك ، يتطلب Gzip مزيدًا من قوة المعالجة لضغط البيانات وفك ضغطها. في معظم الحالات ، يجب استخدام Gzip لضغط الملفات و Zlib لضغط تدفقات البيانات.

يوفر Go وظيفة لضغط البيانات ، بما في ذلك الملفات من خلال ملف ضغط طَرد.

حزمة الضغط

ال ضغط تدعم الحزمة ضغط البيانات من خلال ملف ضغط / gzip و ضغط / zlib الحزم ، من بين وظائف أخرى.

ال gzip تدعم الحزمة ضغط وإلغاء ضغط بيانات تنسيق ملف gzip ، بما في ذلك عمليات القراءة والكتابة على النحو المحدد في RFC 1952. بينما ال زليب تساعد الحزمة في ضغط البيانات وفك ضغطها بتنسيق zlib.

يمكنك استيراد ملفات gzip و زليب من ضغط الحزمة باستخدام يستورد كلمة رئيسية.

instagram viewer
يستورد (
"ضغط / gzip"// استيراد ملف gzip

"ضغط / zlib"// استيراد zlib
)

ضغط الملفات وفك ضغطها باستخدام Gzip

Gzip هو تنسيق ملف وتطبيق برمجي لضغط الملفات وفك ضغطها. يستخدم Gzip خوارزمية سلسلة Lempel-Ziv-Markov (LZ77) لضغط البيانات ، وغالبًا ما تُستخدم الخوارزمية لضغط الملفات النصية ، مثل ملفات HTML أو CSS أو JavaScript.

عملية ضغط الملفات بامتداد gzip الحزمة بسيطة وبديهية. ستحتاج إلى فتح الملف وإنشاء ملف مضغوط بتنسيق gzip وإنشاء كاتب gzip ونسخ الملف الأصلي محتويات الملف إلى كاتب gzip قبل عملية التدفق التي تضمن أن عملية الكتابة مكتمل.

تشغيل هذا أمر باش في طرف دليل العمل الخاص بك على أنظمة Unix لإنشاء ملف نصي نموذجي ثم إدخال نص في الملف.

// ينشئ ملفًا نصيًا.
المس example.txt

// توجيه السلسلة إلى الملف
صدى "مرحبا العالم!" > example.txt}

بعد إنشاء الملف وإدخال النص ، يمكنك استيراد ملف gzip, io و نظام التشغيل حزم لعملية الضغط.

هنا كيف يمكنك استخدام ضغط / gzip حزمة لضغط ملف نصي.

يستورد (
"ضغط / gzip"
"io"
"نظام التشغيل"
)

funcرئيسي() {
// افتح الملف الأصلي
originalFile ، يخطئ: = os. يفتح("example.txt")
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
تأجيل الملف الأصلي. يغلق()

// إنشاء ملف gzipped جديد
gzippedFile ، يخطئ: = os. يخلق("example.txt.gz")
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
تأجيل ملف. يغلق()

// إنشاء كاتب gzip جديد
gzipWriter: = gzip. NewWriter (gzippedFile)
تأجيل gzipWriter. يغلق()

// انسخ محتويات الملف الأصلي إلى كاتب gzip
_ ، يخطئ = io. نسخ (gzipWriter ، originalFile)
لو يخطئ! لا شيء {
ذعر(يخطئ)
}

// مسح كاتب gzip لضمان كتابة جميع البيانات
gzipWriter. دافق ()
}

ال يفتح وظيفة نظام التشغيل الحزمة تفتح الملف النصي ، و يغلق تغلق الوظيفة الملف بامتداد تأجيل إفادة. ال يخلق تقوم الوظيفة بإنشاء ملف مضغوط بتنسيق gzip ، و NewWriter وظيفة gzip تقوم package بكتابة محتوى الملف النصي إلى ملف gzip باستخدام امتداد ينسخ وظيفة io طَرد.

ال دافق طريقة gzipWriter يقوم المثال بمسح كاتب gzip بمجرد توفر جميع البيانات في الملف المضغوط.

يمكنك استرداد الملف الأصلي من ملف مضغوط من خلال عملية فك الضغط. تتشابه عملية فك ضغط الملف ؛ ستفتح الملف وتنشئ قارئ ملف gzip ، ثم تنشئ ملفًا جديدًا للاحتفاظ بالبيانات غير المضغوطة قبل نسخ المحتويات إلى الملف الجديد.

يستورد (
"ضغط / gzip"
"io"
"نظام التشغيل"
)

funcرئيسي() {
// افتح الملف المضغوط بتنسيق gzipped
gzippedFile ، يخطئ: = os. يفتح("example.txt.gz")
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
تأجيل ملف. يغلق()

// إنشاء قارئ gzip جديد
gzipReader ، يخطئ: = gzip. NewReader (gzippedFile)
تأجيل قارئ gzip. يغلق()

// إنشاء ملف جديد لاحتواء البيانات غير المضغوطة
uncompressedFile ، يخطئ: = نظام التشغيل. يخلق("example.txt")
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
تأجيل ملف غير مضغوط. يغلق()

// انسخ محتويات قارئ gzip إلى الملف الجديد
_ ، يخطئ = io. نسخ (ملف غير مضغوط ، قارئ gzip)
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
}

ال يفتح وظيفة نظام التشغيل تقوم الحزمة بفتح الملف بتنسيق gzipped و قارئ جديد وظيفة gzip الحزمة تقرأ الملف المضغوط. ال يخلق وظيفة نظام التشغيل تقوم الحزمة بإنشاء ملف نصي جديد. ال ينسخ وظيفة نسخ محتويات قارئ gzip الى ملف غير مضغوط.

ضغط البيانات وفك ضغطها باستخدام Zlib

Zlib هي مكتبة لضغط البيانات وفك الضغط ؛ تستخدم المكتبة أيضًا خوارزمية LZ77. Zlib مكتوب بلغة C ويستخدم على نطاق واسع كأساس لمكتبات وبرامج ضغط أخرى. على عكس gzip, زليب هي مكتبة ، و زليب لا يشمل أ تنسيق الملف. ومع ذلك ، غالبًا ما يتم استخدامه لضغط البيانات المخزنة في تنسيقات الحاويات ، مثل PNG أو HTTP.

عملية الضغط باستخدام zlib هي نفسها بالنسبة إلى gzip. ستنشئ ملف zlib وتهيئة كاتبًا وفتح الملف الأصلي ونسخ المحتويات إلى الملف المضغوط.

يستورد (
"ضغط / zlib"
"io"
"نظام التشغيل"
)

funcرئيسي() {
// إنشاء ملف جديد "example.zlib"
ملف ، يخطئ: = نظام التشغيل. يخلق("example.zlib")
// إذا حدث خطأ ، فهلع وأوقف البرنامج
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
// تأكد من إغلاق الملف بعد إرجاع الوظيفة
تأجيل ملف. يغلق()

// إنشاء كاتب zlib جديد بأفضل مستوى ضغط
الكاتب ، يخطئ: = zlib. NewWriterLevel (ملف ، zlib. أفضل ضغط)
// إذا حدث خطأ ، فهلع وأوقف البرنامج
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
// تأكد من إغلاق الكاتب بعد عودة الوظيفة
تأجيل كاتب. يغلق()

// فتح ملف الإدخال "example.txt"
ملف الإدخال ، يخطئ: = نظام التشغيل. يفتح("example.txt")
// إذا حدث خطأ ، فهلع وأوقف البرنامج
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
// تأكد من إغلاق ملف الإدخال بعد إرجاع الوظيفة
تأجيل ملف الإدخال. يغلق()

// انسخ محتويات ملف الإدخال إلى الكاتب
io. نسخ (كاتب ، ملف إدخال)
}

ال يخلق طريقة إنشاء ملف zlib ، و NewWriterLevel تقوم الوظيفة بإنشاء كاتب للملف بالخيار المحدد (في هذه الحالة ، ملف أفضل ضغط خيار). ال يفتح طريقة نظام التشغيل الحزمة تفتح الملف النصي ، و ينسخ وظيفة io تقوم الحزمة بنسخ محتوى الملف النصي إلى ملف zlib في عملية الضغط.

لفك ضغط ملف zlib ، ستحتاج إلى فتح الملف المضغوط وإنشاء قارئ zlib جديد ، ثم نسخ محتوى القارئ في النهاية إلى الإخراج القياسي.

يستورد (
"ضغط / zlib"
"io"
"نظام التشغيل"
)

funcرئيسي() {
// فتح الملف المضغوط "compressed_file.zlib"
ملف ، يخطئ: = نظام التشغيل. يفتح("ملف مضغوط .zlib")
// إذا حدث خطأ ، فهلع وأوقف البرنامج
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
// تأكد من إغلاق الملف بعد إرجاع الوظيفة
تأجيل ملف. يغلق()

// إنشاء قارئ zlib جديد للملف المضغوط
القارئ ، يخطئ: = zlib. NewReader (ملف)
// إذا حدث خطأ ، فهلع وأوقف البرنامج
لو يخطئ! لا شيء {
ذعر(يخطئ)
}
// تأكد من إغلاق القارئ بعد عودة الوظيفة
تأجيل قارئ. يغلق()

// انسخ محتويات القارئ إلى الإخراج القياسي
io. نسخ (نظام التشغيل. Stdout ، قارئ)
}

تفتح الوظيفة الرئيسية ملف zlib بامتداد نظام التشغيل الحزمة يفتح وظيفة ، و قارئ جديد وظيفة زليب تقوم الحزمة بقراءة ملف zlib في مثيل قارئ. ال ينسخ طريقة io تقوم الحزمة بنسخ المحتوى من القارئ إلى الإخراج القياسي (في هذه الحالة ، وحدة التحكم).

تعد كتابة التعليمات البرمجية لضغط الملفات أمرًا مفيدًا لأتمتة المهام وضغط العديد من الملفات. إذا كنت تحتاج فقط إلى ضغط بعض الملفات ، فيمكنك اللجوء إلى استخدام تطبيقات مثل WinRar و WinZip و Express Zip و Bandizip.