Алгоритмите Gzip и Zlib се използват широко за компресиране и декомпресиране на файлове. Gzip се използва предимно за компресиране на единични файлове, докато Zlib компресира главно потоци от данни. Алгоритмите използват алгоритъма за компресиране на Deflate за компресиране, въпреки че Gzip предоставя допълнителни функции, включително проверка на грешки и файлови метаданни.
Gzip осигури по-добри съотношения на компресия от Zlib. Gzip обаче изисква повече процесорна мощност за компресиране и декомпресиране на данни. В повечето случаи трябва да използвате Gzip за компресиране на файлове и Zlib за компресиране на потоци от данни.
Go предоставя функционалност за компресиране на данни, включително файлове чрез компресирам пакет.
Компресният пакет
The компресирам пакетът поддържа компресиране на данни чрез компресиране/gzip и компрес/zlib пакети, наред с други функции.
The gzip пакетът поддържа компресиране и декомпресиране на данните във файлов формат gzip, включително операции за четене и запис, както е посочено в RFC 1952. Докато zlib Пакетът помага при компресиране и декомпресиране на данни във формат zlib.
Можете да импортирате gzip и zlib от компресирам пакет с помощта на импортиране ключова дума.
импортиране (
"компресиране/gzip"// импортиране на gzip
"компресиране/zlib"// импортиране на zlib
)
Компресиране и декомпресиране на файлове с Gzip
Gzip е файлов формат и софтуерно приложение за компресиране и декомпресиране на файлове. Gzip използва верижния алгоритъм Lempel-Ziv-Markov (LZ77) за компресиране на данни и алгоритъмът често се използва за компресиране на текстови файлове, като HTML, CSS или JavaScript файлове.
Процесът на компресиране на файлове с gzip пакетът е прост и интуитивен. Ще трябва да отворите файла, да създадете gzip файл, да създадете gzip записващо устройство и да копирате оригинала съдържанието на файла към gzip записващото устройство преди операцията за изчистване, която гарантира, че процесът на запис е пълен.
Стартирайте това bash команда в терминала на вашата работна директория на Unix системи, за да създадете примерен текстов файл и след това да вмъкнете текст във файла.
// създава текстов файл.
докоснете example.txt
// предава низа към файла
echo 'Здравей, свят!' > example.txt}
След като създадете файла и вмъкнете текста, можете да импортирате gzip, io, и операционна система пакети за операцията по компресиране.
Ето как можете да използвате компресиране/gzip пакет за компресиране на текстов файл.
импортиране (
"компресиране/gzip"
"йо"
"операционна система"
)функосновен() {
// Отворете оригиналния файл
оригинален файл, грешка := os. отворено("example.txt")
ако грешка!= нула {
паника(грешка)
}
отлагам оригинален файл. Близо()// Създаване на нов gzipped файл
gzippedFile, грешка := os. Създаване ("example.txt.gz")
ако грешка!= нула {
паника(грешка)
}
отлагам gzippedFile. Близо()// Създайте нов gzip записващ файл
gzipWriter := gzip. NewWriter (gzippedFile)
отлагам gzipWriter. Близо()// Копирайте съдържанието на оригиналния файл в gzip записващото устройство
_, грешка = io. Копиране (gzipWriter, originalFile)
ако грешка!= нула {
паника(грешка)
}
// Прочистете gzip записващото устройство, за да сте сигурни, че всички данни са записани
gzipWriter. Промиване ()
}
The Отворете функция на операционна система пакет отваря текстовия файл и Близо функцията затваря файла с a отлагам изявление. The Създавайте функцията създава gzipped файл и NewWriter функция на gzip пакет записва съдържанието на текстовия файл в gzip файла с помощта на копие функция на io пакет.
The Промиване метод на gzipWriter екземпляр изчиства gzip записващото устройство, след като всички данни са налични в компресирания файл.
Можете да извлечете оригиналния файл от gzipped файл чрез процес на декомпресия. Процесът на декомпресиране на файл е подобен; ще отворите файла и ще създадете gzip четец на файлове, след което ще създадете нов файл, който да съдържа некомпресираните данни, преди да копирате съдържанието в новия файл.
импортиране (
"компресиране/gzip"
"йо"
"операционна система"
)функосновен() {
// Отворете gzipped файла
gzippedFile, грешка := os. отворено("example.txt.gz")
ако грешка!= нула {
паника(грешка)
}
отлагам gzippedFile. Близо()// Създайте нов gzip четец
gzipReader, грешка := gzip. NewReader (gzippedFile)
отлагам gzipReader. Близо()// Създайте нов файл за съхранение на некомпресираните данни
uncompressedFile, err := os. Създаване ("example.txt")
ако грешка!= нула {
паника(грешка)
}
отлагам некомпресиран файл. Близо()
// Копирайте съдържанието на gzip четеца в новия файл
_, грешка = io. Копиране (некомпресиран файл, gzipReader)
ако грешка!= нула {
паника(грешка)
}
}
The Отворете функция на операционна система пакет отваря gzipped файла и NewReader функция на gzip пакет чете компресирания файл. The Създавайте функция на операционна система package създава нов текстов файл. The копие функцията копира съдържанието на gzipReader към некомпресиран файл.
Компресиране и декомпресиране на данни със Zlib
Zlib е библиотека за компресиране и декомпресиране на данни; библиотеката също използва алгоритъма LZ77. Zlib е написан на C и се използва широко като основа за други библиотеки и софтуер за компресиране. За разлика от gzip, zlib е библиотека и zlib не включва a файлов формат. Въпреки това често се използва за компресиране на данни, съхранявани във формати на контейнери, като PNG или HTTP.
Процесът на компресиране със zlib е същият като при gzip. Ще създадете zlib файл, ще конфигурирате записващо устройство, ще отворите оригиналния файл и ще копирате съдържанието в компресирания файл.
импортиране (
"компресиране/zlib"
"йо"
"операционна система"
)функосновен() {
// Създайте нов файл "example.zlib"
файл, грешка := os. Създаване ("example.zlib")
// Ако възникне грешка, изпадайте в паника и спрете програмата
ако грешка!= нула {
паника(грешка)
}
// Уверете се, че файлът е затворен, след като функцията се върне
отлагам файл. Близо()// Създайте нов zlib записващ файл с най-доброто ниво на компресия
писател, грешка := zlib. NewWriterLevel (файл, zlib. най-добра компресия)
// Ако възникне грешка, изпадайте в паника и спрете програмата
ако грешка!= нула {
паника(грешка)
}
// Уверете се, че записващото устройство е затворено, след като функцията се върне
отлагам писател. Близо()// Отворете входния файл "example.txt"
inputFile, грешка := os. отворено("example.txt")
// Ако възникне грешка, изпадайте в паника и спрете програмата
ако грешка!= нула {
паника(грешка)
}
// Уверете се, че входният файл е затворен, след като функцията се върне
отлагам inputFile. Близо()
// Копиране на съдържанието на входния файл към писателя
io. Копиране (записващ, входен файл)
}
The Създавайте създава zlib файла и NewWriterLevel функцията създава записващо устройство за файла с указаната опция (в този случай, Най-добра компресия опция). The Отворете метод на операционна система пакет отваря текстовия файл и копие функция на io пакетът копира съдържанието на текстовия файл в zlib файла в процеса на компресиране.
За да декомпресирате zlib файла, ще трябва да отворите компресирания файл, да създадете нов zlib четец и след това накрая да копирате съдържанието на четеца в стандартен изход.
импортиране (
"компресиране/zlib"
"йо"
"операционна система"
)функосновен() {
// Отворете компресирания файл "compressed_file.zlib"
файл, грешка := os. отворено("компресиран_файл.zlib")
// Ако възникне грешка, изпадайте в паника и спрете програмата
ако грешка!= нула {
паника(грешка)
}
// Уверете се, че файлът е затворен, след като функцията се върне
отлагам файл. Близо()// Създаване на нов zlib четец за компресирания файл
читател, грешка := zlib. NewReader (файл)
// Ако възникне грешка, изпадайте в паника и спрете програмата
ако грешка!= нула {
паника(грешка)
}
// Уверете се, че четецът е затворен, след като функцията се върне
отлагам читател. Близо()
// Копиране на съдържанието на четеца в стандартния изход
io. Копиране (os. Stdout, читател)
}
Основната функция отваря zlib файла с операционна система пакет Отворете функция и NewReader функция на zlib package чете zlib файла в екземпляр на четец. The копие метод на io пакетът копира съдържанието от четеца в стандартния изход (в този случай конзолата).
Писането на код за компресиране на файлове е удобно за автоматизиране на задачи и компресиране на няколко файла. Ако трябва да компресирате само няколко файла, можете да използвате приложения като WinRar, WinZip, Express Zip и Bandizip.