问题标签 [deflatestream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1714 浏览

c# - Zlib Deflate 的“同步刷新”

我需要一个 zlib deflate 压缩流。在我的实现中,我必须在整个会话中使用单个流。在此会话期间,小块数据将通过压缩流。每次传递一个块时,它必须立即以压缩形式发送。

我的第一次尝试是使用 DeflateStream,但是当我发送第一个块时,它的压缩数据在我关闭流之前不会出现。

阅读有关zlib 刷新模式的信息,似乎有一种特定模式可以满足我的需要。

  1. 我是否使用正确的类(DeflateStream)进行 zlib 放气压缩?
  2. 如何启用“同步刷新”行为?
0 投票
3 回答
8144 浏览

c# - C# 自定义序列化/反序列化以及 DeflateStreams

我正在尝试对对象进行自定义序列化/反序列化以及使用 DeflateStreams 压缩/解压缩序列化数据。我最初是为更复杂的对象执行此操作,但为了找出问题而将其删减,但它仍然存在,因此变得更加令人费解。这是要序列化/反序列化的类:

这是应该序列化它的代码(这似乎有效):

这是反序列化:

现在,问题。反序列化会引发 SerializationException 并显示消息 {"No map for object '201326592'."} 我不知道如何排除故障或找出导致问题的确切原因。当我在同一个 MemoryStream 上运行 BinaryFormatter 的 Serialize 和 Deserialize 方法时,非常基本的序列化工作。

我尝试从这两种方法中删除 DeflateStream 的东西,但它仍然是同样的问题。当我查看 MSDN 和其他地方的示例时,看起来我做得恰到好处,并且谷歌搜索异常消息并没有给出任何有意义的结果(或者我可能只是不擅长搜索)。

PS。如您所见,我使用 Miscellaneous.CopyStream(src, dest) 这是一个基本的流复制器,因为我根本无法让 src.CopyTo(dest) 工作,因此也欢迎任何提示。

如果您想更仔细地查看它,下面是整个 VS2010 项目的链接: http ://www.diredumplings.com/SerializationTesting.zip

更新:

The_Smallest:我尝试使用您在我的序列化中发布的 Compress 方法:

但是,它似乎给我带来了与之前 srcStream.CopyTo(destStream) 相同的问题,即它似乎没有被写入流中。当我尝试将其保存到磁盘时,结果是一个 0 kb 的文件。有任何想法吗?

Pieter:我从反序列化方法中删除了 MemoryStream,它似乎具有与以前相同的功能。但是我不确定如何按照您建议的方式实现序列化。这是你的想法吗?

感谢你们俩!

0 投票
1 回答
1505 浏览

compression - DataSet 或任何 .Net 对象的压缩/解压缩

我正在开发一个 WPF 应用程序,我想在其中加密和压缩大量数据集或对象 (<2MB) 并通过网络发送它。另一方将解压缩和解密数据并使用它。此过程将在从服务器(WCF)到客户端和客户端到服务器的两侧进行。

  1. 我想要高效的压缩类(想坚持使用 .Net 压缩类)。
  2. 压缩和解压缩所需的时间更少。
  3. 压缩率高,而数据检索应为 100%。

任何人都可以向我推荐压缩类(DeflateStream/GzipStream)。

谢谢
主播

0 投票
2 回答
2744 浏览

c# - 原始流有数据,Deflate 返回零字节

我正在阅读应该压缩的数据(adCenter 报告,碰巧)。用普通流读取内容,我得到了几千字节的乱码,所以这似乎是合理的。所以我将流提供给 DeflateStream。

首先,它报告“块长度与其补码不匹配”。一个简短的搜索表明有一个双字节前缀,实际上如果我在打开 DeflateStream 之前调用 ReadByte() 两次,异常就会消失。

但是,DeflateStream 现在什么都不返回。我花了大部分下午的时间在这方面寻找线索,但没有运气。帮助我,StackOverflow,你是我唯一的希望!谁能告诉我我错过了什么?

这是代码。自然,我在测试时一次只启用了两个注释块之一。

正如您可能从最后一行猜到的那样,解压缩的内容应该是 TDT。

只是为了好玩,我尝试使用 GZipStream 解压缩,但它报告幻数不正确。MS 的文档只是说“下载的报告是使用 zip 压缩压缩的。您必须先解压缩报告才能使用其内容。”


这是最终起作用的代码。我必须将内容保存到文件中并重新读取。这似乎不合理,但对于我正在使用的少量数据,这是可以接受的,我会接受的!

0 投票
1 回答
2393 浏览

.net - GzipStream (.net 4.0) 4GB 问题

我无法使用内置的 .net 4.0 Gzip 和 Deflate 类以编程方式解压缩 3GB(7GB 未压缩)gzip 文件。

我的理解是它们都应该支持超过 4GB 的文件,但它们似乎不起作用。当我使用 WinRAR 手动解压缩有问题的文件,然后使用流式阅读器流式传输底层 csv 文件并计算行数时,我得到了预期的结果,大约 7500 万行。但是,当使用 GzipStream 或 DeflateStream 执行此操作时,流读取器会在一半多一点处停止(正好在 4GB 标记附近)并报告“流结束”并在没有错误的情况下结束。使用这些阅读器,我只能在流结束前到达大约 3400 万行。

然后我尝试了.net zip http://dotnetzip.codeplex.com/的最新二进制文件,它运行到一半并引发错误。“目标数组不够长。检查 destIndex 和长度,以及数组的下限。”

我没有创建这个文件,但我们以前从未遇到过来自同一来源的较小文件的问题,所以我怀疑大小是导致问题的原因。可能是用于创建此文件的工具不兼容 64 位,但在我对创建者进行错误处理之前,我想确保在 gzip 提取器逻辑中该错误不在我们这边。

任何想法将不胜感激。下面的示例提取代码和测试方法:

0 投票
1 回答
2570 浏览

c# - 是否可以恢复损坏部分之外的损坏 Zlib 数据?

我有一个 Zip 存档,其中包含一个不会提取的大(重要)文件。我尝试过的所有 Zip 实用程序,包括那些声称可以恢复/修复损坏的 Zip 存档的实用程序都无法提取包含损坏的 zlib 压缩数据的文件。他们获取存档中的所有文件,但损坏的条目除外,后者会被跳过。

我用 C# 编写了一个小型实用程序应用程序,它解析 zip 存档、识别每个条目并解析出字段、解密数据部分,然后使用 DeflateStream(来自 zlib 的 .Net 实现)解压缩它们。一切正常,直到我到达损坏的入口。损坏的条目成功且完全解密(在 CTR 模式下使用 AES),但 DeflateStream 阅读器在抛出“坏状态(超额订阅动态位长度树)”之前只能通过大约 40MB 的解密数据。

是否有可能以某种方式“寻找”经过损坏的部分并继续解压缩数据?我想尽可能多地恢复文件,即使有一些漏洞。DeflateStream 没有实现 Seek 方法,如果我尝试创建一个新的 DeflateStream 并将底层 FileStream 定位到最后一个读取位置,它会抛出相同的“Bad State”异常。

0 投票
0 回答
822 浏览

vb.net - DeflateStream 在解压数据时重复字节

我遇到了 DeflateStream 的问题——一些数据被重复写入到最后。

这是代码:

你怎么解释这个?

http://i.stack.imgur.com/d2ffF.png

更新

我尝试了 Ionic.Zlib.ZlibStream 和 Ionic.Zlib.DeflateStream ,我得到了同样奇怪的结果。

0 投票
2 回答
1912 浏览

c# - 又一个 DeflateStream 解压问题(使用 using 和 memory 流)

首先,我注意到压缩对象需要更多字节,然后纯粹以二进制形式表示对象。(228 对 166)。

其次,我似乎无法解压缩它。

此外,由于我没有 .NET 框架的第 4 版,因此我无法使用出色的 CopyTo 功能。

最后一个 DeflateStream 使用块需要做什么?

0 投票
3 回答
1201 浏览

c# - Does DeflateStream "skip" decompression if the data was not originally compressed?

I'm not familiar with the internals of DeflateStream, but I need to store files in a Vendor's DB system that uses DeflateStream on binary attachments. The first thing I noticed was that all of my files were 10-50% BIGGER after compression, but I attribute that to a less sophisticated compression algo on top of files that are already highly compressed (in this case they were all PDFs). My question however relates to the fact that when I just wrote the original file into the BLOB the Vendor's application had no problem opening it (it opened the attachments I compressed with deflate as well). Is there a header on the compressed data that tells DeflateStream that the data's not compressed and basically pass it on as-is? This is the specification; can anyone familiar with it point where this is defined - or am I off base and the vendor is doing some magic behind the scenes?

0 投票
1 回答
545 浏览

c# - 放气结果令人失望,这正常吗?

我正在尝试压缩图像文件以通过网络发送,这是我的测试压缩方法

结果是

375531

354450

我想在压缩时至少应该得到 5 位而不是 6 位,这正常吗?我做对了吗?

提前致谢