【发布时间】:2012-05-07 05:04:56
【问题描述】:
我有一个带有基于 Mono 的 C# 客户端和 Python 服务器的程序,它们通过 TCP/IP 套接字进行通信。消息主要使用二进制格式,但每条消息的最大部分通常是嵌入的 UTF-8 字符串(英文)。每条消息通常都很短(不到 100 字节),但有些消息可能更长(最多 64K)。交换了大量数据,我想通过在传输数据时压缩数据来减少消息大小和带宽使用。
我最初的研究没有发现任何明显兼容这 2 个标准库的东西。 Python 有一个 zlib 库,但我不能使用 C# 的 DeflateStream 或 GZipStream(因为它们需要一个我没有可用的外部 DLL)而且它似乎不适用于 SharpZipLib 的 ZipOutputStream(发出“错误-3 - 不正确的标题”响应)。 (那些不使用 Mono 的人可能更幸运 - 请参阅下面的 Duncan 的回答。)
我很想听听有关在此通信链路上启用压缩的简单方法,请记住,任何可能易于用一种语言实现的解决方案都需要在另一种语言中具有等效的解决方案。我会接受专门针对 UTF-8 字符串而不是二进制消息的解决方案,尽管首选是压缩整个字节流。
理想情况下,我希望将外部依赖降至最低,但我意识到这可能不切实际。
更新:在尝试使用 SharpZipLib 并在 Python 解码端遇到重复错误后,我真的可以使用已知有效的代码提出具体建议,而不仅仅是针对一种语言或另一种语言的压缩库的建议。
【问题讨论】:
-
SharpZip 具有与 zlib 兼容的实现 - InflaterInputStream 和 DeflaterOutputStream
标签: c# .net python mono compression