O que é uma boa biblioteca de compressão para Java?
-
02-07-2019 - |
Pergunta
Eu preciso porções compressa de tráfego de rede da nossa aplicação para o desempenho. Eu presumo que isso significa que eu preciso para ficar longe de alguns dos algoritmos mais recentes, como bzip2, que acho que tenho ouvido é mais lento.
Solução
Você pode usar deflater / inflater que é construído no JDK. Há também GZIPInputStream e GZIPOutputStream, mas realmente depende do seu uso exato.
Editar:
A leitura mais comentários parece que o taffic rede é HTTP. Dependendo do servidor, ele provavelmente tem suporte para compressão (especialmente com deflate / gzip). O problema torna-se então no cliente. Se o cliente é um navegador que provavelmente já suporta. Se o seu cliente é um cliente webservices ou um cliente http verifique a documentação para esse pacote para ver se ele é compatível.
Parece que jakarta-commons httpclient pode exigir que você faça manualmente a compressão. Para activar esta no lado do cliente que você vai precisar fazer algo como
.addRequestHeader("Accept-Encoding","gzip,deflate");
Outras dicas
Se o tráfego de rede está indo através de HTTP, a maioria dos diversos servidores web / contentores servlet suporte para negociada fechando, por exemplo, mod_deflate para Apache.
Seu algoritmo de compressão depende do que a sua tentativa de otimizar e quanta largura de banda que você tem disponível.
Se você estiver em um gigibit LAN, quase qualquer algoritmo de compressão vai abrandar o seu programa para baixo um pouco. Se a sua conexão através de uma WAN ou internet, você pode dar ao luxo de fazer um pouco mais de compressão. Se você conectado a um dial-up, você deve comprimir tanto como ele absolutamente possível.
Se esta é uma WAN, você pode encontrar soluções de hardware como da Riverbed são mais eficazes, como eles trabalham através uma gama de tráfego, e não requerem quaisquer alterações ao software.
I tem um caso de teste que mostra a diferença de compressão relativo entre esvaziar, filtrada, BZip2 e lzma . Basta ligar uma amostra de seus dados, e testar o tempo entre duas máquinas.