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.
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);
}
}