c# - 在 Python 中压缩并使用解压缩 C# 解压缩的最简单方法(反之亦然)

标签 c# .net python mono compression

我有一个带有基于 Mono 的 C# 客户端和 Python 服务器的程序,它们通过 TCP/IP 套接字进行通信。这些消息主要使用二进制格式,但每条消息的最大部分通常是嵌入的 UTF-8 字符串(英文)。每条消息通常都很短(小于 100 字节),但有些可能更长(最多 64K)。交换大量数据,我希望通过在传输数据时压缩数据来减少消息大小和带宽使用。

我的初步研究并未发现任何在这两个标准库之间明显兼容的内容。 Python有一个zlib库,但我不能使用 C# 的 DeflateStream或 GZipStream (因为它们需要一个我没有的外部 DLL),并且它似乎无法与 SharpZipLib 的 ZipOutputStream 一起使用(给出“错误 -3 - 错误的 header ”响应)。 (那些不使用 Mono 的人可能会更幸运 - 请参阅下面邓肯的回答。)

我有兴趣了解在此通信链路上启用压缩的简单方法,请记住,任何可以轻松用一种语言实现的解决方案都需要在另一种语言中具有等效的解决方案。我接受专门针对 UTF-8 字符串而不是二进制消息的解决方案,尽管首选是压缩整个字节流。

理想情况下,我希望将外部依赖性保持在最低限度,但我意识到这可能不切实际。

更新:在尝试使用 SharpZipLib 并在 Python 解码方面遇到重复错误后,我确实可以使用已知有效的代码提出具体建议,而不仅仅是针对一种语言或另一种语言的压缩库的建议。

最佳答案

你写道:

Similarly both standard libraries offer gzip compression but Python expects to use file in this case, which is not practical.

这实际上不是真的。 Python 的 gzip.GZipFile() 类采用 filenamefileobj。如果您想使用字符串,只需使用 StringIO 对象作为 fileobj:

from gzip import GzipFile
from StringIO import StringIO
sio = StringIO()
with GzipFile(fileobj=sio, mode='wb') as gzip:
    gzip.write('uncompressed data')
compressed = sio.getvalue()

关于c# - 在 Python 中压缩并使用解压缩 C# 解压缩的最简单方法(反之亦然),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10448023/

相关文章:

c# - 如何将 string[] 组合成字符串,中间有空格

c# - C#中属性的不同访问修饰符

asp.net - 对于自托管 NServiceBus ASP.NET 端点,MSDTC 失败,但对于其他进程则失败

Python 和 MySQL——哪个用得更多?

c# - 通过 DbContext 添加对象会重复相关对象

c# - 当应用程序在 Windows 10 中以分配的访问模式运行时无法显示 MessageBox

.net - 用于从 Appfabric 缓存中删除项目的 Powershell 命令

.net - ASP.NET MVC : Access logs

python - 你如何检查一个字符串在 python 中是否有多个特定字符。示例 字符串 'mood' 显然有两个 'o' 字符

Python Selenium PhantomJS quit() 错误