- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
zlib 的 deflate 函数接受一个 Z_FULL_FLUSH
选项作为它的参数,据我所知,当执行 full flush 时,一个 full flush point (0,0,0xFF,0xFF )
将被设置,后续数据将独立于该点之前的字节,因此使压缩数据准随机访问。我读了一点 dictzip 的来源,它利用这个特性来实现它的 block 随机可访问性,同时保持与 gzip 的兼容性。我想使用 CLR 提供的功能重新实现 dictzip 压缩器/解压缩器。解压器(random parts reader)很简单,我用DeflateStream一个 block 一个 block 地解压数据就可以了,没问题,但是创建起来有很大的障碍,DeflateStream的API太高级了,似乎所有放气细节都被隐藏了,因此无法利用。我真的不喜欢在我的 C# 项目中包含 C 共享库,这使得跨平台部署非常痛苦,并且首先抵消了选择在 C# 中编码的好处。所以我该怎么做?有什么方法可以仅使用托管代码来绕过这个障碍吗? Mono 是否为 zlib 提供了一个较低级别的包装器,以便我可以使用 full flush 选项调用 deflate?任何建议将不胜感激!
--->8 ---
感谢 Mark Adler 提供了答案。 DotNetZip(特别是 Ionic.Zlib.DeflateStream)完全支持我所要求的功能。下面的例子展示了它是如何工作的:
Encoding u8 = Encoding.UTF8;
byte[] s1 = u8.GetBytes("the quick brown fox "),
s2 = u8.GetBytes("jumps over the lazy dog!");
var ms = new MemoryStream(100);
var deflator = new DeflateStream(ms, CompressionMode.Compress, true);
deflator.FlushMode = FlushType.Full;
deflator.Write(s1, 0, s1.Length);
deflator.Flush();
var pos = ms.Position;//remember the full flush point
deflator.Write(s2, 0, s2.Length);
deflator.Dispose();
var inflator = new DeflateStream(ms, CompressionMode.Decompress);
ms.Position = pos;
byte[] buf = new byte[100];
inflator.Read(buf, 0, s2.Length);
Console.WriteLine(u8.GetString(buf));//output: jumps over the lazy dog!
最佳答案
尝试 DotNetZip . SO 不允许我发布少于 30 个字符,即使这是一个完整且正确的答案,所以我添加了这个无关的句子。
关于c# - 有没有办法强制 DeflateStream 完全刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13560131/
我正在研究 my other question 的解决方案它正在读取 PNG 的“zTXt” block 中的数据。我就在文件中定位 block ,并阅读 zTXt 的关键字。我无法读取 zTXt 的
我试图使用 DeflateStream 压缩字节数组。拧完数据后,我正在寻找一种关闭压缩的方法(标记为完成)。起初,我尝试了 Dispose(),然后是 Close(),但这些都使结果 MemoryS
我有以下代码: MemoryStream resultStream = new MemoryStream(); string users = ""//Really long string goes h
我正在使用 DeflateStream 在我的机器上压缩短字符串 public byte[] Compress(byte[] oryginalBytes) { using (var msi =
尝试压缩和解压缩 MemoryStream 但似乎 CopyTo 没有像预期的那样工作?为什么?如何解决这个问题? public static MemoryStream Compress(Memory
zlib 的 deflate 函数接受一个 Z_FULL_FLUSH 选项作为它的参数,据我所知,当执行 full flush 时,一个 full flush point (0,0,0xFF,0xFF
我正在尝试对对象进行自定义序列化/反序列化,以及使用 DeflateStreams 压缩/解压缩序列化数据。我最初是为更复杂的对象这样做的,但将其缩减以尝试找出问题所在,但它变得更加令人费解,因为它仍
我在使用 C# .NET DeflateStream(..., CompressionMode.Decompress) 读取压缩(压缩)数据文件时遇到问题。该文件是早些时候使用 DeflateStre
所以这是一个奇怪的。我有这个方法来获取 Base64 编码的压缩字符串并返回原始数据: public static string Base64Decompress(string base64data)
在 Java 中,这按预期工作: public static void testwrite(String filename) throws IOException { FileOutput
我目前正在尝试将一些涉及使用 DeflateStream 的 C# 代码移植到没有 .NET 框架支持的标准 C++ 中。这种功能的一个例子是: public static byte[] ReadCo
我用 DeflateStream 压缩了数据。我可以解压 whit c#,但我如何解压 whit c++ (VS2013 RC)?我试过给 zlib 充气。没用。 最佳答案 有一些 header 和校
我使用 DeflateStream 实现了 Websocket 压缩,如下所示: public byte[] Compress(Stream input) { usin
我不熟悉 DeflateStream 的内部结构,但我需要将文件存储在供应商的数据库系统中,该系统在二进制附件上使用 DeflateStream。我注意到的第一件事是我的所有文件在压缩后都变大了 10
我正在尝试在 C# 中使用 deflate/gzip 流,但压缩后的文件似乎比以前大。 例如,我压缩了一个 900ko 的 docx 文件,但它产生了一个 1.4Mo 的文件! 它对我尝试过的每个文件
我需要一种在 .net 中压缩图像的方法,所以我研究了使用 .net GZipStream 类(或 DeflateStream)。但是我发现解压缩并不总是成功,有时图像可以很好地解压缩,有时我会收到
MSDN 文档告诉我以下内容: The GZipStream class uses the gzip data format, which includes a cyclic redundancy c
我不是格式方面的专家,但我猜测由于格式化开销,压缩数据的某些输入数据实际上可能更长。 我对此没有意见,但我不满意的是 GZipStream/DeflateStream.Write() 的计数参数的记录
我需要 Windows 和 Ubuntu 之间的跨平台压缩/解压缩。据我了解,从 .NET 4.5 开始,DeflateStream 类使用 zlib 作为压缩库。我编写了两个小测试程序来压缩数据,一
我正在使用单声道来膨胀/收缩字节。这是代码: public static byte[] Inflate(byte[] data) { using (MemoryStream i
我是一名优秀的程序员,十分优秀!