zlib - zlib
lançamento inicial | 1 de maio de 1995 |
---|---|
Versão estável | 1.2.11 / 15 de janeiro de 2017
|
Repositório | |
Escrito em | C |
Sistema operacional | Plataforma cruzada |
Modelo | Compressão de dados |
Licença | Licença zlib |
Local na rede Internet | zlib |
zlib é uma biblioteca de software usada para compressão de dados . zlib foi escrito por Jean-loup Gailly e Mark Adler e é uma abstração do algoritmo de compressão DEFLATE usado em seu programa de compressão de arquivo gzip . zlib também é um componente crucial de muitas plataformas de software, incluindo Linux , macOS e iOS . Também tem sido usado em consoles de jogos como PlayStation 4 , PlayStation 3 , Wii U , Wii , Xbox One e Xbox 360 .
A primeira versão pública do zlib, 0.9, foi lançada em 1 de maio de 1995 e foi originalmente planejada para uso com a biblioteca de imagens libpng . É um software livre , distribuído sob a licença zlib .
Capacidades
Encapsulamento
Os dados compactados do zlib são normalmente escritos com um gzip ou um wrapper zlib. O wrapper encapsula os dados DEFLATE brutos adicionando um cabeçalho e um trailer. Isso fornece identificação de fluxo e detecção de erros que não são fornecidas pelos dados DEFLATE brutos.
O cabeçalho gzip, usado no formato de arquivo gzip onipresente , é maior do que o cabeçalho zlib, pois armazena um nome de arquivo e outras informações do sistema de arquivos.
Algoritmo
Em setembro de 2018, zlib oferece suporte a apenas um algoritmo, chamado DEFLATE , que usa uma combinação de uma variação de LZ77 (Lempel – Ziv 1977) e codificação de Huffman . Este algoritmo fornece boa compactação em uma ampla variedade de dados com uso mínimo de recursos do sistema. Este também é o algoritmo usado no formato de arquivo Zip . O cabeçalho permite outros algoritmos, mas nenhum está implementado atualmente.
Uso de recursos
O zlib fornece recursos para controle do uso do processador e da memória. Um valor de nível de compressão pode ser fornecido para trocar velocidade por compressão. Também existem recursos para conservar memória, úteis em ambientes de memória restrita, como alguns sistemas embarcados.
Estratégia
A compactação pode ser otimizada para tipos específicos de dados. Se alguém estiver usando a biblioteca para sempre compactar tipos específicos de dados, o uso de uma estratégia específica pode melhorar a compactação e o desempenho. Por exemplo, se os dados contêm comprimentos longos de bytes repetidos, a estratégia de codificação de comprimento de execução (RLE) pode dar bons resultados em velocidade mais alta. Para dados gerais, a estratégia padrão é preferida.
Manipulação de erros
Erros em dados compactados podem ser detectados e ignorados. Além disso, se os pontos de "liberação total" forem gravados no fluxo compactado, os dados corrompidos podem ser ignorados e a descompressão será sincronizada novamente no próximo ponto de liberação - embora nenhuma recuperação de erro dos dados corrompidos seja fornecida. Os pontos de descarga total são úteis para grandes fluxos de dados em canais não confiáveis, onde alguma perda de dados não é importante, como em alguns aplicativos de multimídia. No entanto, a criação de muitos pontos de descarga pode afetar a velocidade e também a quantidade (proporção) de compactação.
Comprimento de dados
Não há limite para o comprimento dos dados que podem ser compactados ou descompactados. Chamadas repetidas para a biblioteca permitem que um número ilimitado de blocos de dados sejam tratados. Alguns códigos auxiliares (contadores) podem sofrer estouro para fluxos de dados longos, mas isso não afeta a compactação ou descompactação real.
Ao compactar um fluxo de dados longo (ou infinito), é aconselhável gravar pontos de liberação total regulares.
Formulários
Hoje, o zlib é quase um padrão de fato , a ponto de zlib e DEFLATE serem usados alternadamente em documentos de padrões, com milhares de aplicativos contando com ele para compactação, direta ou indiretamente. Esses incluem:
- O kernel Linux , onde zlib é usado para implementar protocolos de rede compactados , sistemas de arquivos compactados e para descompactar a imagem do kernel no momento da inicialização.
- GNU Binutils e GNU Debugger (GDB)
- libpng , a implementação de referência para o formato de imagem PNG , que especifica DEFLATE como a compactação de fluxo para seus dados de bitmap .
- libwww , uma API para aplicativos da Web, como navegadores da Web .
- O servidor HTTP Apache , que usa zlib para implementar HTTP / 1.1 .
- Da mesma forma, a biblioteca cURL usa zlib para descompactar respostas HTTP.
- O cliente e servidor OpenSSH , que dependem do zlib para realizar a compactação opcional oferecida pelo protocolo Secure Shell .
- As bibliotecas de segurança OpenSSL e GnuTLS , que podem opcionalmente usar zlib para compactar conexões TLS .
- A biblioteca multimídia FFmpeg , que usa zlib para ler e gravar as partes compactadas DEFLATE de formatos de fluxo , como Matroska .
- O sincronizador de arquivo remoto rsync , que usa zlib para implementar compactação de protocolo opcional.
- Os gerenciadores de pacotes dpkg e RPM , que usam zlib para descompactar arquivos de pacotes de software compactados.
- Os sistemas de controle de versão Apache Subversion e CVS , que usam zlib para compactar o tráfego de e para repositórios remotos.
- O formato de armazenamento de dados orientado a coluna do Apache ORC usa ZLib como seu método de compactação padrão.
- O sistema de controle de versão Git usa zlib para armazenar o conteúdo de seus objetos de dados (blobs, árvores, commits e tags).
- O PostgreSQL RDBMS usa zlib com formato de dump personalizado (pg_dump -Fc) para backups de banco de dados.
- A classe System.IO.Compression.DeflateStream do Microsoft .NET Framework 2.0 e superior.
- O utilitário "deflate" no TORNADO como parte do sistema operacional VxWorks desenvolvido pela Wind River Systems usa zlib para compactar imagens ROM de inicialização.
- qpdf , programa de compressão zlib bruto, parte do
- O MySQL RDBMS usa ZLib LZ77 para compressão em tabelas InnoDB
O zlib também é usado em muitos dispositivos embarcados, como o Apple iPhone e o Sony PlayStation 3 , porque o código é portátil, amplamente licenciado e tem uma pegada de memória relativamente pequena.
Forks
Uma biblioteca comumente usada construída em uma base de código antiga, zlib também é frequentemente bifurcada por terceiros que reivindicam melhorias para esta biblioteca:
- A Intel tem um fork do zlib de alto desempenho.
- CloudFlare mantém uma bifurcação de alto desempenho com melhorias "massivas".
- Zlib-ng é uma bifurcação de substituição do zlib com otimizações para sistemas de "próxima geração".