Какая хорошая библиотека сжатия для Java?

StackOverflow https://stackoverflow.com/questions/127001

  •  02-07-2019
  •  | 
  •  

Вопрос

Мне нужно сжать часть сетевого трафика нашего приложения для повышения производительности.Я предполагаю, что это означает, что мне нужно держаться подальше от некоторых новых алгоритмов, таких как bzip2, который, как я слышал, медленнее.

Это было полезно?

Решение

Вы можете использовать Дефлатер/Накачиватель который встроен в JDK.Существуют также GZIPInputStream и GZIPOutputStream, но это действительно зависит от вашего конкретного использования.

Редактировать:

Читая дальнейшие комментарии, похоже, что сетевой трафик HTTP.В зависимости от сервера он, вероятно, поддерживает сжатие (особенно с помощью deflate/gzip).Тогда проблема становится на клиенте.Если клиентом является браузер, он, вероятно, уже поддерживает его.Если ваш клиент является клиентом веб-сервисов или http-клиент проверьте документацию для этого пакета, чтобы узнать, поддерживается ли он.

Похоже, что httpclient jakarta-commons может потребовать от вас выполнить сжатие вручную.Чтобы включить это на стороне клиента, вам нужно будет сделать что-то вроде

.addRequestHeader("Accept-Encoding","gzip,deflate");

Другие советы

Если сетевой трафик проходит через HTTP, большинство различных веб-серверов/контейнеров сервлетов поддерживают согласованное сжатие, например mod_deflate для Apache.

Ваш алгоритм сжатия зависит от того, что вы пытаетесь оптимизировать, и от того, какая у вас пропускная способность.

Если вы используете гигибитную локальную сеть, практически любой алгоритм сжатия немного замедлит работу вашей программы.Если вы подключаетесь через глобальную сеть или Интернет, вы можете позволить себе немного большее сжатие.Если вы подключены к коммутируемому соединению, вам следует сжать настолько сильно, насколько это возможно.

Если это глобальная сеть, вы можете найти аппаратные решения, такие как Русло реки более эффективны, поскольку работают в широком диапазоне трафика и не требуют каких-либо изменений в программном обеспечении.

У меня есть тестовый пример, который показывает относительную разницу сжатия между Выкачивание, фильтрация, BZip2 и lzma.Просто подключите образец своих данных и проверьте синхронизацию между двумя машинами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top