我有一个程序,有一个基于Mono的C#客户机和Python服务器,它们通过TCP/IP套接字进行通信。消息主要使用二进制格式,但每条消息的最大部分通常嵌入UTF-8字符串(英语)。每条消息通常很短(小于100字节),但有些可能更长(最多64K)。大量的数据被交换,我想通过压缩传输数据来减少消息的大小和带宽的使用。在
我的初步研究还没有发现任何明显兼容这两个标准库的东西。Python有一个zlib库,但我不能使用C#的DeflateStream或GZipStream(因为它们需要一个我没有的外部DLL),而且它似乎不能与SharpZipLib的ZipOutputStream(给出“error-3-incorrect header”响应)一起工作。(那些不使用Mono的人可能会更幸运-见下面邓肯的答案。)
我很想知道在这个通信链路上实现压缩的简单方法,要记住,任何可能容易用一种语言实现的解决方案都需要另一种语言实现。我会接受一个专门针对UTF-8字符串而不是二进制消息的解决方案,尽管首选的是压缩整个字节流。在
理想情况下,我希望将外部依赖性保持在最低限度,但我意识到这可能并不实际。在
更新:在尝试了SharpZipLib并在Python解码方面遇到了重复的错误之后,我真的可以用已知有效的代码给出具体的建议,而不仅仅是一种语言或另一种语言的压缩库的建议。
你写道:
事实上不是这样的。Python的
gzip.GZipFile()
类采用filename
或fileobj
。如果要使用字符串,只需使用StringIO
对象作为fileobj
:看来你是在尼克斯系统上。如果是这样,并且所有其他方法都失败了,您可以简单地使用系统库(单声道.Unix.Native)不需要担心如何找到合适的.Net库。在
SharpZipLib和Python库中的BZip2对我很有用。以下是我测试的内容和方法:
首先,C#程序(参考SharpZipLib):
然后是Python:
^{pr2}$接下来,运行C程序。之后:
我想它也会反过来的。在
相关问题 更多 >
编程相关推荐