Problemas java.util.zip

11 respostas
C

pessoal… meu problema eh o seguinte… eu quero gravar um blob no banco de dados compactado e abri-lo descompactado … quando o cara vai gravar, eu pego o arquivo e converto para um byte[] . Quero pegar o conteudo desse byte[], compactar e jogar o byte[] no banco… alguem me ajuda?

11 Respostas

P

caduengenheiro,

dá uma olhada neste artigo.

Irá te ajudar.

http://www.guj.com.br/java.tutorial.artigo.181.1.guj

C

este ai ensina a compactar e descompactar arquivos zip… quero aprender a compactar e descompactar em formato zip blobs do banco de dados

J

[code]

J

Não bastaria pegar o arquivo, gerar o .zip dele e gravar esse .zip no campo blob ??

É igual só que diferente??

C

escuta… é o seguinte… como vou buscar o campo do blob e por consequencia virar um byte[] … repare que eu nao preciso gravar isso em arquivo, ou seja, um File . Quero descobrir como compactar e descompactar apenas por esse campo byte[]

C

será que ninguem pode me ajudar?

C

obrigado quem tentou me ajudar…eis a solução

public byte[] descompactarAnexo(byte[] anexo) {
		Inflater decompressor = new Inflater();
	    decompressor.setInput(anexo);
	    
	    ByteArrayOutputStream bos = new ByteArrayOutputStream(anexo.length);
	    
	    // Decompress the data
	    byte[] buf = new byte[1024];
	    while (!decompressor.finished()) {
	        try {
	            int count = decompressor.inflate(buf);
	            bos.write(buf, 0, count);
	        } catch (DataFormatException e) {
	        }
	    }
	    try {
	        bos.close();
	        return bos.toByteArray();
	    } catch (IOException e) {
	    	return null;
	    }
}

	public byte[] compactarAnexo(byte[] anexo) {
		Deflater compressor = new Deflater();
	    compressor.setLevel(Deflater.BEST_COMPRESSION);
	    
	    compressor.setInput(anexo);
	    compressor.finish();
	    
	    ByteArrayOutputStream bos = new  ByteArrayOutputStream(anexo.length);
	    
	    byte[] buf = new byte[1024];
	    while (!compressor.finished()) {
	        int count = compressor.deflate(buf);
	        bos.write(buf, 0, count);
	    }
	    try {
	        bos.close();
	        return bos.toByteArray();	        
	    } catch (Exception e) {
	    	System.out.println("Erro: "+e.getMessage());
	    	return null;
	    }	    
	    // Get the compressed data	    	    		
    }//fim compactar()
J

Muito bem caduengenheiro, é isso aí.

Agora você poderia alterar o título do post pra “Compactação em memória utilizando Inflater/Deflater” que, ao final das contas, foi o que você utilizou.

C

mas essas classes usam o pacote java.util.zip nao ?

especifiquei o problema claramente desde o primeiro post … agora se voce nao foi competente o suficiente em olhar o problema e me indicar o Inflater/Deflater, paciencia

[]s

J

caduengenheiro:
mas essas classes usam o pacote java.util.zip nao ?

especifiquei o problema claramente desde o primeiro post … agora se voce nao foi competente o suficiente em olhar o problema e me indicar o Inflater/Deflater, paciencia

[]s

Mérito seu se conseguiu resolver o problema sozinho, e postou a maneira de como chegou lá, coisa que a maioria não faz, e pelo menos agora você não vai esquecer nunca mais dessas classes. Se eu tivesse conhecimento delas eu teria lhe passado há séculos.

Apenas sugeri trocar o título do tópico, nada mais. Sem tom de ironia. Se você entendeu isso me desculpe.

Incopetência minha realmente não satisfazer um membro do forum em tempo hábil. Lamentável…

C

desculpa se fui grosso … é que achei que tinha especificado tudo muito bem … nem vc nem ninguem tem a obrigação de atender, mas mesmo assim vc tentou… valeu a ajuda… []s

Criado 24 de janeiro de 2007
Ultima resposta 30 de jan. de 2007
Respostas 11
Participantes 4