Problemas java.util.zip

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?

caduengenheiro,

dá uma olhada neste artigo.

Irá te ajudar.

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

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

[code]

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

É igual só que diferente??

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[]

será que ninguem pode me ajudar?

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()   
	    

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.

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

[quote=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[/quote]

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…

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