Os algoritmos Gzip e Zlib são usados popularmente para compactar e descompactar arquivos. O Gzip é usado principalmente para compactar arquivos únicos, enquanto o Zlib compacta principalmente fluxos de dados. Os algoritmos usam o Deflate Compression Algorithm para compactação, embora o Gzip forneça recursos adicionais, incluindo verificação de erros e metadados de arquivo.
O Gzip fornece taxas de compactação melhores que o Zlib. No entanto, o Gzip requer mais poder de processamento para compactar e descompactar dados. Na maioria dos casos, você deve usar Gzip para compactar arquivos e Zlib para compactar fluxos de dados.
Go fornece a funcionalidade para compactar dados, incluindo arquivos por meio do comprimir pacote.
O pacote de compressão
O comprimir pacote suporta compressão de dados através do compactar/gzip e compactar/zlib pacotes, entre outras funcionalidades.
O gzip O pacote oferece suporte à compactação e descompactação dos dados do formato de arquivo gzip, incluindo operações de leitura e gravação conforme especificado em RFC 1952. Enquanto o zlib O pacote ajuda a compactar e descompactar dados no formato zlib.
você pode importar gzip e zlib de comprimir pacote usando o importar palavra-chave.
importar (
"comprimir/gzip"// importa gzip
"comprimir/zlib"// importa zlib
)
Compactando e descompactando arquivos com Gzip
Gzip é um formato de arquivo e um aplicativo de software para compactação e descompactação de arquivos. O Gzip usa o algoritmo da cadeia Lempel-Ziv-Markov (LZ77) para compactar dados, e o algoritmo é frequentemente usado para compactar arquivos de texto, como arquivos HTML, CSS ou JavaScript.
O processo de compactação de arquivos com o gzip pacote é simples e intuitivo. Você precisará abrir o arquivo, criar um arquivo gzipado, criar um gravador gzip e copiar o original conteúdo do arquivo para o gravador gzip antes da operação de liberação que garante que o processo de gravação seja completo.
Rode isto comando bash no terminal de seu diretório de trabalho em sistemas Unix para criar um arquivo de texto de amostra e, em seguida, inserir texto no arquivo.
// cria um arquivo de texto.
toque exemplo.txt
// canaliza a string para o arquivo
echo 'Olá, mundo!' > exemplo.txt}
Após criar o arquivo e inserir o texto, você pode importar o gzip, eu, e os pacotes para a operação de compactação.
Aqui está como você pode usar o compactar/gzip pacote para compactar um arquivo de texto.
importar (
"comprimir/gzip"
"io"
"os"
)funçãoprincipal() {
// Abre o arquivo original
arquivooriginal, err := os. Abrir("exemplo.txt")
se erro != nada {
pânico(errar)
}
adiar originalArquivo. Fechar()// Cria um novo arquivo gzipado
gzippedFile, err := os. Criar("exemplo.txt.gz")
se erro != nada {
pânico(errar)
}
adiar gzippedFile. Fechar()// Cria um novo gravador gzip
gzipWriter := gzip. NewWriter (gzippedFile)
adiar gzipWriter. Fechar()// Copia o conteúdo do arquivo original para o gravador gzip
_, erro = io. Copiar (gzipWriter, originalFile)
se erro != nada {
pânico(errar)
}
// Libera o gravador gzip para garantir que todos os dados sejam gravados
gzipWriter. Rubor()
}
O Abrir função do os pacote abre o arquivo de texto e o Fechar função fecha o arquivo com um adiar declaração. O Criar A função cria um arquivo gzipado e o NewWriter função do gzip pacote grava o conteúdo do arquivo de texto no arquivo gzip usando o cópia de função do io pacote.
O Rubor método do gzipWriter instância libera o gravador gzip assim que todos os dados estiverem disponíveis no arquivo compactado.
Você pode recuperar o arquivo original de um arquivo gzipado por meio de um processo de descompactação. O processo de descompactação de um arquivo é semelhante; você abrirá o arquivo e criará um leitor de arquivo gzip e, em seguida, criará um novo arquivo para manter os dados descompactados antes de copiar o conteúdo para o novo arquivo.
importar (
"comprimir/gzip"
"io"
"os"
)funçãoprincipal() {
// Abre o arquivo gzipado
gzippedFile, err := os. Abrir("exemplo.txt.gz")
se erro != nada {
pânico(errar)
}
adiar gzippedFile. Fechar()// Cria um novo leitor gzip
gzipReader, err := gzip. NewReader (gzippedFile)
adiar gzipReader. Fechar()// Cria um novo arquivo para armazenar os dados descompactados
uncompressedFile, err := os. Criar("exemplo.txt")
se erro != nada {
pânico(errar)
}
adiar uncompressedFile. Fechar()
// Copia o conteúdo do leitor gzip para o novo arquivo
_, erro = io. Copiar (uncompressedFile, gzipReader)
se erro != nada {
pânico(errar)
}
}
O Abrir função do os pacote abre o arquivo gzipado, e o NovoLeitor função do gzip package lê o arquivo compactado. O Criar função do os pacote cria um novo arquivo de texto. O cópia de função copia o conteúdo do gzipReader para o arquivo descompactado.
Compactando e descompactando dados com Zlib
Zlib é uma biblioteca para compactação e descompactação de dados; a biblioteca também usa o algoritmo LZ77. Zlib é escrito em C e é amplamente usado como base para outras bibliotecas e softwares de compactação. Diferente gzip, zlib é uma biblioteca e zlib não inclui um formato de arquivo. No entanto, geralmente é usado para compactar dados armazenados em formatos de contêiner, como PNG ou HTTP.
O processo de compactação com zlib é o mesmo do gzip. Você criará um arquivo zlib, configurará um gravador, abrirá o arquivo original e copiará o conteúdo para o arquivo compactado.
importar (
"comprimir/zlib"
"io"
"os"
)funçãoprincipal() {
// Cria um novo arquivo "example.zlib"
arquivo, erro := os. Criar("exemplo.zlib")
// Se ocorrer um erro, entre em pânico e pare o programa
se erro != nada {
pânico(errar)
}
// Certifique-se de que o arquivo seja fechado após o retorno da função
adiar arquivo. Fechar()// Cria um novo gravador zlib com o melhor nível de compactação
escritor, err := zlib. NewWriterLevel (arquivo, zlib. Melhor Compressão)
// Se ocorrer um erro, entre em pânico e pare o programa
se erro != nada {
pânico(errar)
}
// Certifique-se de que o gravador seja fechado após o retorno da função
adiar escritor. Fechar()// Abre o arquivo de entrada "example.txt"
arquivo de entrada, erro := os. Abrir("exemplo.txt")
// Se ocorrer um erro, entre em pânico e pare o programa
se erro != nada {
pânico(errar)
}
// Certifique-se de que o arquivo de entrada seja fechado após o retorno da função
adiar Arquivo de entrada. Fechar()
// Copia o conteúdo do arquivo de entrada para o gravador
io. Copiar (escritor, inputFile)
}
O Criar método cria o arquivo zlib e o NewWriterLevel função cria um gravador para o arquivo com a opção especificada (neste caso, o Melhor compressão opção). O Abrir método do os pacote abre o arquivo de texto e o cópia de função do io O pacote copia o conteúdo do arquivo de texto para o arquivo zlib no processo de compactação.
Para descompactar o arquivo zlib, você precisará abrir o arquivo compactado, criar um novo leitor zlib e, finalmente, copiar o conteúdo do leitor para a saída padrão.
importar (
"comprimir/zlib"
"io"
"os"
)funçãoprincipal() {
// Abre o arquivo compactado "compressed_file.zlib"
arquivo, erro := os. Abrir("arquivo_comprimido.zlib")
// Se ocorrer um erro, entre em pânico e pare o programa
se erro != nada {
pânico(errar)
}
// Certifique-se de que o arquivo seja fechado após o retorno da função
adiar arquivo. Fechar()// Cria um novo leitor zlib para o arquivo compactado
leitor, erro := zlib. NewReader (arquivo)
// Se ocorrer um erro, entre em pânico e pare o programa
se erro != nada {
pânico(errar)
}
// Certifique-se de que o leitor está fechado após o retorno da função
adiar leitor. Fechar()
// Copia o conteúdo do leitor para a saída padrão
io. Copiar (os. Stdout, leitor)
}
A função principal abre o arquivo zlib com a os pacote de Abrir função, e o NovoLeitor função do zlib O pacote lê o arquivo zlib em uma instância do leitor. O cópia de método do io O pacote copia o conteúdo do leitor para a saída padrão (neste caso, o console).
Escrever código para compactação de arquivos é útil para automatizar tarefas e compactar vários arquivos. Se você só precisa compactar alguns arquivos, pode recorrer a aplicativos como WinRar, WinZip, Express Zip e Bandizip.