我正在构建一个需要能够从正常网络流量切换到 zlib 的网络应用程序压缩流,中流。我对此事的想法涉及 bool 开关,当它打开时将导致网络代码通过我可以提供的类传递所有数据 IEnumerable<byte>
进入,然后拉出解压缩的流,将其传递给已经存在的协议(protocol)解析代码。
我看过的东西:
- ZLib.NET - 似乎有点...不拘一格,而不是我想要的。尽管如此,仍然会有一个不错的开始。 (Jon Skeet's comments here 也很难激发我的灵感。)
- SharpZipLib - 这似乎根本不支持 zlib?谁能证实或否认这一点?
我非常喜欢所有托管解决方案,但让我们开始吧......这个库在 .NET 中是否有任何其他实现,可能更适合我想做的事情,或者我应该以 ZLib.NET 为起点构建它?
附言:
Jon 要求提供更多详细信息,所以在这里。
我正在尝试实现 MCCP 2 .这涉及在网络流中发送一个信号,此信号之后的所有内容都是 zlib 压缩数据流。在上面的链接中有指向它们确切含义的链接。无论如何,需要明确的是,我在这个(客户端,而不是服务器)的接收端,我已经从网络流中读取了一堆数据,切换将在这个中间(总共likelyhood atleast),所以任何解决方案都需要能够在它接管 NetworkStream 之前将一些额外的数据输入其中(或者我手动输入其余数据)。
最佳答案
SharpZipLib 确实支持 ZLib。找the FAQ .
此外,您是否检查过 System.IO.Compression 命名空间是否支持您的需求?
我不会使用 IEnumerable<byte>
虽然 - 流被设计为链接在一起。
编辑:好的......听起来你需要一个支持缓冲的流,但比BufferedStream
有更多的控制权。提供。如果您看到解压缩开关,则需要“倒回”流,然后在其上创建一个 GZipStream。您的缓冲区需要至少与您对 Read() 的最大调用一样大,以便您始终有足够的缓冲区来倒带。
关于c# - .NET 中的 zlib 实现是否良好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/513234/