问题标签 [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.
c# - Zlib Deflate 的“同步刷新”
我需要一个 zlib deflate 压缩流。在我的实现中,我必须在整个会话中使用单个流。在此会话期间,小块数据将通过压缩流。每次传递一个块时,它必须立即以压缩形式发送。
我的第一次尝试是使用 DeflateStream,但是当我发送第一个块时,它的压缩数据在我关闭流之前不会出现。
阅读有关zlib 刷新模式的信息,似乎有一种特定模式可以满足我的需要。
- 我是否使用正确的类(DeflateStream)进行 zlib 放气压缩?
- 如何启用“同步刷新”行为?
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,它似乎具有与以前相同的功能。但是我不确定如何按照您建议的方式实现序列化。这是你的想法吗?
感谢你们俩!
compression - DataSet 或任何 .Net 对象的压缩/解压缩
我正在开发一个 WPF 应用程序,我想在其中加密和压缩大量数据集或对象 (<2MB) 并通过网络发送它。另一方将解压缩和解密数据并使用它。此过程将在从服务器(WCF)到客户端和客户端到服务器的两侧进行。
- 我想要高效的压缩类(想坚持使用 .Net 压缩类)。
- 压缩和解压缩所需的时间更少。
- 压缩率高,而数据检索应为 100%。
任何人都可以向我推荐压缩类(DeflateStream/GzipStream)。
谢谢
主播
c# - 原始流有数据,Deflate 返回零字节
我正在阅读应该压缩的数据(adCenter 报告,碰巧)。用普通流读取内容,我得到了几千字节的乱码,所以这似乎是合理的。所以我将流提供给 DeflateStream。
首先,它报告“块长度与其补码不匹配”。一个简短的搜索表明有一个双字节前缀,实际上如果我在打开 DeflateStream 之前调用 ReadByte() 两次,异常就会消失。
但是,DeflateStream 现在什么都不返回。我花了大部分下午的时间在这方面寻找线索,但没有运气。帮助我,StackOverflow,你是我唯一的希望!谁能告诉我我错过了什么?
这是代码。自然,我在测试时一次只启用了两个注释块之一。
正如您可能从最后一行猜到的那样,解压缩的内容应该是 TDT。
只是为了好玩,我尝试使用 GZipStream 解压缩,但它报告幻数不正确。MS 的文档只是说“下载的报告是使用 zip 压缩压缩的。您必须先解压缩报告才能使用其内容。”
这是最终起作用的代码。我必须将内容保存到文件中并重新读取。这似乎不合理,但对于我正在使用的少量数据,这是可以接受的,我会接受的!
.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 提取器逻辑中该错误不在我们这边。
任何想法将不胜感激。下面的示例提取代码和测试方法:
c# - 是否可以恢复损坏部分之外的损坏 Zlib 数据?
我有一个 Zip 存档,其中包含一个不会提取的大(重要)文件。我尝试过的所有 Zip 实用程序,包括那些声称可以恢复/修复损坏的 Zip 存档的实用程序都无法提取包含损坏的 zlib 压缩数据的文件。他们获取存档中的所有文件,但损坏的条目除外,后者会被跳过。
我用 C# 编写了一个小型实用程序应用程序,它解析 zip 存档、识别每个条目并解析出字段、解密数据部分,然后使用 DeflateStream(来自 zlib 的 .Net 实现)解压缩它们。一切正常,直到我到达损坏的入口。损坏的条目成功且完全解密(在 CTR 模式下使用 AES),但 DeflateStream 阅读器在抛出“坏状态(超额订阅动态位长度树)”之前只能通过大约 40MB 的解密数据。
是否有可能以某种方式“寻找”经过损坏的部分并继续解压缩数据?我想尽可能多地恢复文件,即使有一些漏洞。DeflateStream 没有实现 Seek 方法,如果我尝试创建一个新的 DeflateStream 并将底层 FileStream 定位到最后一个读取位置,它会抛出相同的“Bad State”异常。
vb.net - DeflateStream 在解压数据时重复字节
我遇到了 DeflateStream 的问题——一些数据被重复写入到最后。
这是代码:
你怎么解释这个?
http://i.stack.imgur.com/d2ffF.png
更新
我尝试了 Ionic.Zlib.ZlibStream 和 Ionic.Zlib.DeflateStream ,我得到了同样奇怪的结果。
c# - 又一个 DeflateStream 解压问题(使用 using 和 memory 流)
首先,我注意到压缩对象需要更多字节,然后纯粹以二进制形式表示对象。(228 对 166)。
其次,我似乎无法解压缩它。
此外,由于我没有 .NET 框架的第 4 版,因此我无法使用出色的 CopyTo 功能。
最后一个 DeflateStream 使用块需要做什么?
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?
c# - 放气结果令人失望,这正常吗?
我正在尝试压缩图像文件以通过网络发送,这是我的测试压缩方法
结果是
375531
354450
我想在压缩时至少应该得到 5 位而不是 6 位,这正常吗?我做对了吗?
提前致谢