Я ищу некоторые рекомендации по сжатию данных в .NET, кроме использования класса GZipStream. Я ищу быстрое и высокое сжатие байтовых массивов, чтобы отправлять их через tcp.
Спасибо.
Я ищу некоторые рекомендации по сжатию данных в .NET, кроме использования класса GZipStream. Я ищу быстрое и высокое сжатие байтовых массивов, чтобы отправлять их через tcp.
Спасибо.
SharpZipLib является альтернативой. Он сказал, что это написано более тщательно, чем библиотека рамки GZipStream
Если вы сжимаете данные, вы можете посмотреть сериализацию с высокой плотностью, а не на сжатие. Что-то вроде protobuf. Существует несколько реализаций С# здесь. Для существующих объектов protobuf-net является ИМО самым простым в реализации (раскрытие: я автор, но это бесплатно и т.д.). Вы просто сериализуете поток, или хотите byte[]
, отдельный MemoryStream
.
Для непрерывного использования по сокету (а не к секретному запросу/отклику HTTP) я бы предложил посмотреть операции Serializer.SerializeWithLengthPrefix
/Serializer.DeserializeWithLengthPrefix
(protobuf сам не включает терминатор, поэтому префикс длины необходимо обрабатывать отдельные сообщения).
DotNetZip предлагает встроенную поддержку и имеет довольно дружественный API, и мое мнение более гибкое, чем SharpZipLib:
EDIT: К сожалению, у DotNetZip есть некоторые критические проблемы, и проект, похоже, больше не поддерживается. Поэтому эта библиотека не может быть рекомендована для использования в производственном коде.
Лучшими альтернативами будет использование SharpZipLib (если вы согласны с их лицензией на основе GPL), одним из .NET-портов zlib или поддержкой zip.NET 4.5, как показано в этом ответе.
У .NET 3+ теперь есть встроенная поддержка Zip, с классом ZipPackage.
LZMA считается одним из лучших для сжатия. 7-Zip - это реализация SDK в общедоступном домене LZMA, свободно загружаемая здесь:
Википедия по алгоритмам сжатия:
7z Алгоритм LZMA достигает более высокого чем RAR, за исключением "мультимедийные" файлы, такие как .wav и .bmp файлы, в которых RAR использует специализированные которые превосходят LZMA. [7] Другое программное обеспечение для свободного сжатия, такое как как правило, NanoZip и FreeArc превосходят WinRAR. [8]