问题标签 [gzipstream]

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 投票
2 回答
344 浏览

c# - 压缩和解压缩字符串只产生原始字符串的第一个字母?

我正在使用以下代码使用 Gzip 压缩字符串:

并使用以下代码对其进行解压缩:

当我在此示例代码中使用这些函数时,结果只是字母S

如果我调试代码,我看到的decom值为

但显示的值只是字母S

0 投票
1 回答
4000 浏览

c# - 使用 GZipStream 解压只返回第一行

我一直在研究解析第 3 方 fms 日志的函数。日志在 Gzip 中,因此我使用了适用于我们使用的任何其他 Gzip 文件的解压缩功能。

解压这些文件时,我只得到压缩文件的第一行,也不例外,它只是没有找到其余的字节,就好像第一行有一个 EOF。我尝试使用 Ionic.Zlib 而不是 System.IO.Compression 但结果是一样的。这些文件似乎没有以任何方式损坏,使用 Winrar 解压缩它们。

如果有人知道如何解决这个问题,我将不胜感激。谢谢

您可以在此处下载示例文件:http: //www.adjustyourset.tv/fms_6F9E_20120621_0001.log.gz

这是我的解压功能:

0 投票
1 回答
1072 浏览

c# - GZipStream 只解压第一行

我的 GZipStream 只会解压缩文件的第一行。通过 7-zip 提取内容按预期工作,并为我提供了整个文件内容。它还使用 cygwin 和 linux 上的 gunzip 按预期提取,所以我希望这是特定于 O/S 的(Windows 7)。

我不确定如何解决这个问题,所以任何关于这方面的提示都会对我有很大帮助。听起来与此非常相似,但使用 SharpZLib 会产生相同的结果。

这就是我正在做的事情:

0 投票
1 回答
317 浏览

c# - Gzipstream over tcp 不解压

我正在尝试使用protobuf-net和 通过 tcp 连接发送序列化的压缩数据GzipStream

从 zipstream 中反序列化或读取只是阻塞并且没有完成。

为了测试它,我选择尝试使用更简单FileStream的方法来查看数据实际上正在被压缩和写入,事实就是如此。然而,该行Console.writeLine(inPerson1.name)抛出一个Object reference not set exception,因为它似乎没有从 zipstream 中读取任何数据。

关于为什么或我做错了什么的任何想法?

代码:

0 投票
5 回答
11097 浏览

c# - 为什么我的 C# gzip 生成的文件比 Fiddler 或 PHP 大?

如果我 GZip 这个文本:

你好世界

通过 C# 使用此代码:

结果流为 133 字节长

通过 FiddlerUtilities.GzipCompress这个 PHP 页面运行相同的字符串,结果只有 31 个字节长。

在这两种情况下,输入都是 11 个字节,所以我认为 PHP 结果是正确的,但显然这意味着我无法从 .NET 中解压缩 PHP zip,反之亦然。为什么 .NET 输出要大得多?


实际上事实证明,虽然 PHP 和 Fiddler 的结果长度相同,但它们并不相同。我可以在 .NET 中解压 PHP 版本,但不能解压 Fiddler 版本。PHP 页面解压缩了所有三个,因此看起来 Fiddler 和 .NET 的 gzip 实现之间可能存在不兼容。


根据要求,我已将三个输出上传到此处的保管箱。

这些是这些文件的原始十六进制转储(不确定它们是否真的有这样的用途,但我认为这表明提琴手和 PHP 版本之间的区别在于标头,而不是压缩数据本身):

提琴手:

PHP:

C#:

0 投票
1 回答
1626 浏览

c# - 解压/压缩错误

解压时出现错误

“输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非空白字符。”

它压缩得很好,但不解压缩。我查看了许多其他具有相同问题的示例,我觉得我正在遵循所说的内容,但在解压缩时仍然一无所获。以下是压缩和解压方法:

其中 s2 是类型 XElement 字符串 pH = DecompressData(stream2)); 其中stream2是字符串类型..在数据库中它存储在nvarchar类型列中,同时压缩删除根标签。

第一次 xml 就像 peet 3/24/2012 Percent 33.3 10 下一次将另一个学生数据添加到现有 xml 中,这里每次压缩时我们都必须删除父标签。

0 投票
3 回答
6089 浏览

c# - .NET GZipStream 解压缩产生空流

我正在尝试序列化和压缩 WPF FlowDocument,然后执行反向操作 - 解压缩字节数组并反序列化以重新创建 FlowDocument - 使用 .NETGZipStream类。我正在遵循 MSDN 上描述的示例,并且我有以下测试程序:

但是,我在行出现异常,XamlReader.Load这是正常的,因为调试输出告诉未压缩流的长度为零。

为什么最终uncompressed流不包含原始的 123 个字节?

(请忽略“压缩”字节数组大于“未压缩”字节数组的事实——我通常会处理更大的流文档)

0 投票
5 回答
21458 浏览

c# - 如何在没有第三方库的情况下序列化对象+压缩然后解压缩+反序列化?

我在内存中有一个大对象,我想将它作为 blob 保存到数据库中。我想在保存之前对其进行压缩,因为数据库服务器通常不是本地的。

这就是我目前所拥有的:

但是,当我使用 Total Commander 压缩相同的字节时,它总是将大小至少减少 50%。使用上面的代码,它将 58MB 压缩到 48MB,任何小于 15MB 的东西都会变得更大。

我应该使用第三方 zip 库还是在 .NET 3.5 中有更好的方法来做到这一点。我的问题还有其他选择吗?

编辑:

刚刚在上面的代码中发现了一个错误。安杰洛感谢您的修复。

GZipStream 压缩仍然不是很好。与 TC 48% 的压缩相比,gZipStream 的平均压缩率为 35%。

我不知道我从以前的版本中得到了什么样的字节:)

编辑2:

我发现了如何将压缩率从 20% 提高到 47%。我不得不使用两个内存流而不是一个!谁能解释为什么会这样?

这是一个带有 2 个内存流的代码,它的压缩效果更好!!!

0 投票
1 回答
3460 浏览

c# - 将 gZipStream 与一个或两个内存流一起使用会产生很大的不同

我肯定遗漏了一些非常明显的东西,但谁能解释为什么在第二种情况下压缩率要好得多?!

案例 1:非常低的压缩率,有时甚至会增长。

案例 2:更好的压缩并且我没有得到尺寸增长。

我已经完成了镜像解压缩,在这两种情况下,我都可以将其反序列化为源对象而不会出现任何问题。

以下是一些统计数据:

UncSize: 58062085B, Comp1: 46828139B, 0.81%

UncSize: 58062085B, Comp2: 31326029B, 0.54%

UncSize: 7624735B, Comp1: 7743947B, 1.02%

UncSize: 7624735B, Comp2: 5337522B, 0.70%

UncSize: 1237628B, Comp1: 1265406B, 1.02%

UncSize:1237628B,Comp2:921695B,0.74%

0 投票
3 回答
3131 浏览

c# - 执行 GZipStream 压缩时抛出 System.OutofMemoryException

我正在以胜利形式工作。执行以下操作时出错。System.OutOfMemoryException当我尝试连续运行大约 2-3 次操作时,它会显示错误。似乎.NET 无法释放操作中使用的资源。我用于操作的文件很大,大约超过 500 MB。

我的示例代码如下。请帮助我如何解决错误。