Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中实现良好的zlib?_C#_.net_Zlib - Fatal编程技术网

C# 在.NET中实现良好的zlib?

C# 在.NET中实现良好的zlib?,c#,.net,zlib,C#,.net,Zlib,我正在构建一个网络应用程序,它需要能够从正常的网络流量切换到压缩流,中间流。我对这个问题的想法涉及到布尔开关,当该开关打开时,将导致网络代码通过一个类传递所有数据,我可以将IEnumerable馈送到该类中,然后取出解压缩的流,将其传递给已经存在的协议解析代码 我看过的东西: -看起来有点。。。教会的,不是我想要的。但这仍然是一个良好的开端。(我也没什么灵感。) -这似乎根本不支持zlib?有人能证实或否认这一点吗 我非常喜欢和所有管理的解决方案,但让我们来看看。。。这个库在.NET中是否有

我正在构建一个网络应用程序,它需要能够从正常的网络流量切换到压缩流,中间流。我对这个问题的想法涉及到布尔开关,当该开关打开时,将导致网络代码通过一个类传递所有数据,我可以将
IEnumerable
馈送到该类中,然后取出解压缩的流,将其传递给已经存在的协议解析代码

我看过的东西:

  • -看起来有点。。。教会的,不是我想要的。但这仍然是一个良好的开端。(我也没什么灵感。)
  • -这似乎根本不支持zlib?有人能证实或否认这一点吗
我非常喜欢和所有管理的解决方案,但让我们来看看。。。这个库在.NET中是否有其他更适合我的实现,或者我应该从ZLib.NET开始构建它

PS:

乔恩要求提供更多细节,就在这里


我正在努力实现。这涉及到在网络流中发送的信号,该信号之后的所有内容都是zlib压缩数据流。在上面的链接中,有一些链接指向它们的确切含义。无论如何,要清楚的是,我在这个结束(客户端,而不是服务器),并且我已经有一组数据从网络流中读出,并且切换将在中间(至少在所有可能的情况下),所以任何解决方案都需要能够有一些额外的数据馈入它,然后接管网络流。(或者我手动输入其余数据)。

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


SharpZipLib确实支持ZLib。查看

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

不过,我不会使用
IEnumerable
——流被设计为链接在一起

编辑:好的……听起来你需要一个支持缓冲的流,但是比
BufferedStream
提供的控制更多。如果你看到解压切换,你需要“倒带”流,然后在它上面创建一个GZipStream。你的缓冲区需要至少和你最大的Read()调用一样大因此,您可以始终有足够的缓冲区进行倒带。

据我所知,ZLib(gzip)库不支持在标题中列出文件。假设这对您很重要,但这似乎是一个很大的缺点。这是我不久前使用sharp zip库时的情况,因此我愿意删除此:)

包含在,用于压缩或解压缩zlib数据流。您没有问,但是还有一个GZipStream和一个deflatesttream。还有一个ZlibCodec类,如果你喜欢的话。(仅对缓冲区充气或放气,与流相反)


DotNetZip是一个完全管理的库,具有自由许可证。您不需要使用任何.zip功能来获取Zlib内容。zlib的东西被打包成一个单独的(更小的)DLL,就是为了这个目的

老问题,但是如果您需要适当的zlib支持,那么
System.IO.Compression.DeflateStream实际上是正确的答案:

从.NET Framework 4.5开始,DeflateStream类使用 zlib库。因此,它提供了一种更好的压缩算法 而且,在大多数情况下,压缩文件比 NET Framework的早期版本


没有比这更好的了。

我同意你关于IEnumerable的观点。。。但事实是,在将网络流连接到zlib流之前,我找不到一种方法将我已经读取的数据推送到zlib流中(因为这种转换发生在流的中间)。有什么建议吗?我不太清楚你在做什么。您是否有两个不同的输出流,并且希望在它们之间切换?事实上,无论你是在读还是在写,我都不太明白。对这个问题的更多解释可能会产生更好的想法:)好的,我用一个BufferedStream包装了我的NetworkStream,然后。。。没有什么。Beginhead只是挂在那里无所事事。大概它是在等待一个完整的缓冲区,但我以前使用4k读取缓冲区,很明显登录屏幕不会占用那么多空间。我取消了BufferedStream,而只是一个字节一个字节地读取,因为我的处理功能是一个字节一个字节的状态机。酷-这让生活简单多了:)这是预发行版,我正在开发mono,所以我想省去头痛的事,避开它,但我还是会去看看。我们已经在生产中使用它两年多了,包括.NET和mono。到目前为止没有问题。这是通过网络对远程控制台进行压缩。没有文件名。所以这并不重要。但是作为对您答案的回应,有相当多的压缩没有(我想到了gzip和bzip2),这就是为什么它们通常与tar一起使用的原因。这实际上是用于压缩的.NET库(我头顶上的gzip)那没有显示文件名对不起,我应该把问题读得更清楚一些…10分钟后再见。当你收到一个特定的包时,zip的标题会开始吗?我不知道。就我个人而言,我不太注意这个细节层次。我怀疑这是特定于服务器实现的,在任何描述文档中都没有提到。你有没有为MCCP 2找到一个好的库?@m4tt1mus:我不相信我能让它工作。如果你感兴趣的话,我可以试着看看我是否能找到我的代码。我想我仍然在某个地方有它。我可能只是看看我是否可以在我的.NET项目中使用c库。不过,我在C方面绝对不是那么棒。