.NET 的 GzipStream 与 Qt 基于 zlib 的 qCompress/qUncompress 兼容吗?
.NET 的 GzipStream 与 Qt 的基于 zlib 的 qCompress/qUncompress 兼容吗?我相信它们都使用 deflate 算法,所以我是否能够使用 .NET 的 DeflateStream 或 GzipStream 读取 Qt 的 qCompress 写入的数据,并写入 Qt 的 qUncompress 可读的数据,而无需在 .NET 中重新实现整个 zlib ?
Is .NET's GzipStream compatible with Qt's zlib-based qCompress/qUncompress? I believe they both use the deflate algorithm, so would I be able to use .NET's DeflateStream or GzipStream to read data written by Qt's qCompress, and write data readable by Qt's qUncompress without reimplementing zlib in its entirety in .NET?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我对此表示怀疑。首先,qCompress() 将数据大小放在前 4 个字节中,这与 zlib 标准无关。您可能希望跳过这些字节,但这是一个肮脏的黑客行为。其次,当 qCompress() 使用 compress2() 调用时,GzipStream 听起来像是读取 Gzip 格式(专为压缩文件而设计的 zlib 格式),而 compress2() 调用使用另一种专为内存压缩而设计的 zlib 格式。
qCompress() 和 qUncompress() 旨在相互配合,仅此而已。如果需要兼容其他代码,直接使用zlib,简单且可移植。事实上,我们公司正在这样做——服务器使用Qt,客户端使用.Net和Java。工作完美。
I doubt it. First, qCompress() puts data size in the first 4 bytes which has nothing to do with zlib standards. You may wish to skip those bytes, but that's a dirty hack. Second, GzipStream sounds like it reads Gzip format (zlib format designed for compressing files) when qCompress() uses compress2() call which uses another zlib format designed for in-memory compression.
qCompress() and qUncompress() are designed to work with each other and nothing more. If you need compatibility with other code, use zlib directly, it is easy and portable. In fact, we are doing it in our company - the server uses Qt, the clients use .Net and Java. Works perfectly.