我正在构建一个网络应用程序,需要能够从正常网络流量切换到中间流的zlib压缩流。我对这个问题的看法涉及布尔开关,当打开时会导致网络代码通过我可以将IEnumerable<byte>
输入的类传递所有数据,然后拉出解压缩的流,将其传递给已经存在的协议解析代码。
我看过的事情:
我非常喜欢和所有托管的解决方案,但是让我们拥有它......在.NET中有没有这个库的任何其他实现,可能更适合我想做的事情,或者我应该采取ZLib.NET并将其作为一个开始?
PS:
Jon要求提供更多细节,所以就是这样。
我正在尝试实施MCCP 2。这涉及在网络流中发送的信号,并且该信号之后的所有内容都是zlib压缩数据流。在上面的链接中,它们与它们的含义完全相同。无论如何,要清楚,我正在接收这个(客户端,而不是服务器),我已经从网络流中读出了一堆数据,并且切换将在此中间(在所有至少可能性,所以任何解决方案都需要能够在接管NetworkStream之前将一些额外的数据输入其中(或者我手动输入其余的数据)。
答案 0 :(得分:3)
SharpZipLib支持ZLib。查看the FAQ。
此外,您是否检查过System.IO.Compression命名空间是否支持您需要的内容?
我不会使用IEnumerable<byte>
- 流被设计为链接在一起。
编辑:好的......听起来你需要一个支持缓冲的流,但控制力比BufferedStream
提供的更多。如果您看到解压缩切换,则需要“回放”流,然后在其上创建GZipStream。你的缓冲区需要至少与你对Read()的最大调用一样大,这样你就可以有足够的缓冲区来回放。
答案 1 :(得分:3)
DotNetZip中包含ZlibStream,用于压缩或解压缩zlib数据流。你没有问,但也有一个GZipStream和一个DeflateStream。和ZlibCodec类一样,如果这是你的事情。 (只是膨胀或放气缓冲区,而不是流)。
DotNetZip是一个拥有自由许可证的完全托管的库。您不需要使用任何.zip功能来获取Zlib的东西。并且zlib的东西被打包为一个单独的(较小的)DLL,仅用于此目的。
答案 2 :(得分:2)
这篇文章中接受的回答是:Zlib-compatible compression streams,对你有帮助吗?
答案 3 :(得分:0)
我可以向你推荐Gerry Shaw的.NET的zlib包装器:
答案 4 :(得分:0)
据我所知,ZLib(gzip)库不支持列出标题中的文件。假设对你很重要,但这似乎是一个很大的缺点。这是我刚才使用sharp zip库的时候,所以我愿意删除它:)
答案 5 :(得分:0)
古老的问题,但是System.IO.Compression.DeflateStream
实际上是正确的答案,如果您需要适当的zlib支持:
从.NET Framework 4.5开始,DeflateStream类使用 zlib库。结果,它提供了更好的压缩算法 并且在大多数情况下,压缩文件比其提供的压缩文件小 .NET Framework的早期版本。
没有比这更好的了。