Compressão de dados em Java

Este artigo apresenta as principais classes do pacote java.util.zip, que oferece uma API de acesso a funcionalidades de compactação de arquivos ou objetos em Java.

Fique por dentro
Nesse artigo, as principais classes desse pacote serão comentadas e através de exemplos de aplicações será mostrado como ler as entradas de um arquivo ZIP, como compactar todos os arquivos de um diretório e como compactar e descompactar objetos.

Além disso, será ensinado como acionar os comandos do shell para compilar e executar aplicações.

Algumas aplicações podem gerar um volume muito grande de dados a serem gravados no sistema de arquivos, levando à necessidade cada vez maior de espaço de armazenamento. Um problema semelhante ocorre em aplicações que transmitem grandes quantidades de dados por uma stream, podendo causar a demanda de uma conexão com maior largura de banda.

A fim de oferecer suporte à linguagem Java para compactar dados de forma simples e rápida, sem demandar integração com aplicações de terceiros, o pacote java.util.zip é oferecido desde o JDK 1.1, onde é proposta uma API com comandos capazes de compactar e descompactar arquivos e objetos.

A API java.util.zip suporta os formatos ZIP e GZIP, possibilita a verificação de checksums, além de disponibilizar outros recursos que são acessados de forma simples e eficaz. A seguir são listadas as principais classes desse pacote:

· ZipEntry: É usada para representar arquivos ou diretórios compactados (entradas) em um arquivo ZIP;

· ZipFile: É usada para abrir arquivos ZIP e acessar as suas entradas;

· ZipInputStream e ZipOutputStream: Stream para ler e gravar dados em arquivos compactados no formato ZIP;

· Deflater e Inflater: Oferece recursos de uso geral para compactar e descompactar arquivos usando a popular biblioteca ZLIB;

· DeflaterInputStream, DeflaterOutputStream, InflaterInputStream, InflaterOutputStream: Permite compactar e descompactar arquivos usando o algoritmo “deflate”;

· GZIPInputStream e GZIPOutputStream: Permite ler e criar arquivos compactados no formato GZIP;

· CRC32: Classe usada para calcular o checksum CRC-32 de uma stream de dados.

Utilizando as classes do pacote java.util.zip é possível acessar de forma simples e rápida os recursos de compactação e descompactação de arquivos e objetos. Além disso, são oferecidos vários formatos de compactação, que são adequados para a grande maioria dos casos.

Com base nisso, a seguir serão analisadas algumas das classes do pacote java.util.zip através de exemplos para ler arquivos compactados, gravar arquivos compactados e compactar e descompactar objetos em memória em Java.

Entradas de um arquivo ZIP: a classe ZipEntry

Na linguagem Java, um arquivo ZIP é representado como uma lista de entradas. Uma entrada pode ser um arquivo ou um diretório, que por sua vez também é uma lista de entradas. Para representar uma entrada, sendo arquivo ou diretório, é usado um objeto da classe ZipEntry.

O construtor ZipEntry() recebe como parâmetro o nome da entrada, ou seja, o nome completo do diretório ou arquivo compactado (entrada) pertencente ao arquivo ZIP.

Usando os métodos getComment() e setComment() é possível recuperar ou redefinir o comentário que descreve essa entrada. Os métodos getCompressedSize() e setCompressedSize() permitem acessar o tamanho compactado da entrada.

Já os métodos getSize() e setSize() possibilitam acessar o tamanho original da entrada. Os métodos getCRC() e setCRC(), por sua vez, possibilitam acessar o checksum CRC-32 da entrada. Por fim, getName() retorna o nome da entrada e isDirectory() permite verificar se ela é um diretório.

" [...] continue lendo...

Artigos relacionados