Serializable com ZIP / GZIP

OPA!

E ai pessoal beleza??

Situação: tem uma classe que eu serializo (pra arquivo) e desSerializo numa boa. Depois que serializei pego arquivo e compacto.

Dúvida: como faço isso em um só processo?? Eu já tentei de tudo para serializar e zipar junto (em um só processo) e não obtenho nenhum resultado satisfatório, ou não zipa ou não serializa.

Vocês podem dizer, tá mas porque não deixa assim se tá funcionando?? Porque é POG (programação Orientada a Gambiarra) e pode não funcionar, se o local onde vc gravar (o temp) não tiver acesso a escrita.

Será que alguém conhece alguma solução?? Qualquer dica já valendo.

Peço desculpas se isto já tinha sido perguntado, mas não encontrei no forum.

Abraços!

Serve um arquivo .gz? Isso é fácil. (Para arquivos .zip, que podem conter vários arquivos dentro, então o processo é mais complicado, mas acho que você pode entender facilmente). Vou dar um exemplo bobo.

import java.io.*;
import java.util.*;
import java.util.zip.*;

class Cliente implements Serializable {
    String nome;
    String endereco;
    double divida;
    public Cliente (String n, String e, double d) { nome = n; endereco = e; divida = d; }
    public String toString() { return String.format ("nome %s: endereco %s: deve R$ %.2f%n", 
        nome, endereco, divida); }
}
class SerializeAndCompact {
    @SuppressWarnings ("unchecked")
    public static void main(String[] args) throws Exception {
        List<Cliente> clientes = new ArrayList<Cliente>();
        clientes.add (new Cliente ("Luis Inacio", "Palacio da Alvorada", 171.69));
        clientes.add (new Cliente ("Hugo Chavez", "Capitolio Federal", 666.67));
        clientes.add (new Cliente ("Evo Morales", "Estacion de Desamparados", 1234.56));
        System.out.println ("Lista de clientes a ser serializada:");
        System.out.println (clientes);
        ObjectOutputStream oos = new ObjectOutputStream (new GZIPOutputStream (new FileOutputStream ("teste.gz")));
        oos.writeObject (clientes);
        oos.close();
        clientes = null; // perco a referência ao objeto, e vamos carregá-lo do arquivo serializado
        ObjectInputStream ois = new ObjectInputStream (new GZIPInputStream (new FileInputStream ("teste.gz")));
        clientes = Collections.checkedList ((List<Cliente>)ois.readObject (), Cliente.class);
        ois.close();
        System.out.println ("Lista de clientes que foi lida do arquivo serializado:");
        System.out.println (clientes);
    }
}

OPA!!!

Muito obrigado, serve GZIP sim, era exatamente isso que eu precisava.

Eu tinha tentado fazer isto com ZIP e não deu certo, com GZIP fica perfeito, deve ter sido esse detalhe dos multiplos arquivos memso.

Realmente lhe agradeço.

Sou usuário novo desto forum e ele está se mostrando muito eficiente em todos os aspectos, assim como o site que tem ótimo material também.

Valeu

Eduardo