在.NET中实现良好的zlib?

问题描述 投票:7回答:5

我正在构建一个网络应用程序,需要能够从正常的网络流量切换到zlib压缩流,即中流。我对这个问题的看法涉及布尔开关,当打开时会导致网络代码通过我可以将IEnumerable<byte>输入的类传递所有数据,然后拉出解压缩的流,将其传递给现有的协议解析代码。

我看过的事情:

  • ZLib.NET - 看起来有点...... Ecclectic,而不是我想要的。尽管如此,仍然会有一个不错的开端。 (Jon Skeet's comments here也很难激励我。)
  • SharpZipLib - 这似乎根本不支持zlib?任何人都可以确认或否认这个吗?

我非常喜欢和所有托管的解决方案,但是让我们拥有它......在.NET中是否存在这个库的任何其他实现,可能更适合我想要做的事情,或者我应该采用ZLib。 NET并建立起来作为一个开始?

PS:

乔恩要求更多细节,所以在这里。

我正在尝试实施MCCP 2。这涉及在网络流中发送的信号,并且该信号之后的所有内容都是zlib压缩数据流。在上面的链接中,它们与它们的含义完全相同。无论如何,要清楚,我正在接收这个(客户端,而不是服务器),我已经从网络流中读出了一堆数据,并且切换将在此中间(在所有至少可能),所以任何解决方案都需要能够在接管NetworkStream之前将一些额外的数据输入其中(或者我手动输入其余的数据)。

c# .net zlib
5个回答
3
投票

包含在DotNetZip中的是ZlibStream,用于压缩或解压缩zlib数据流。你没有问,但也有一个GZipStream和一个DeflateStream。和ZlibCodec类一样,如果这是你的事情。 (只是膨胀或放气缓冲区,而不是流)。

DotNetZip是一个拥有自由许可证的完全托管的库。您不需要使用任何.zip功能来获取Zlib的东西。并且zlib的东西被打包为一个单独的(较小的)DLL,仅用于此目的。


3
投票

SharpZipLib确实支持ZLib。看看the FAQ

此外,您是否检查过System.IO.Compression命名空间是否支持您需要的内容?

我不会使用IEnumerable<byte> - 流被设计为链接在一起。

编辑:好的...听起来你需要一个支持缓冲的流,但比BufferedStream提供的控制更多。如果您看到解压缩切换,则需要“回放”流,然后在其上创建GZipStream。你的缓冲区需要至少与你对Read()的最大调用一样大,这样你总能有足够的缓冲区来回放。


2
投票

这篇文章中接受的答案是:Zlib-compatible compression streams,对你有帮助吗?


0
投票

我可以推荐Gerry Shaw的.NET的zlib包装器:

http://www.organicbit.com/zip/


0
投票

据我所知,ZLib(gzip)库不支持在头文件中列出文件。假设对你很重要,但这似乎是一个很大的缺点。这是我刚才使用尖锐的zip库,所以我愿意删除这个:)

© www.soinside.com 2019 - 2024. All rights reserved.