gpt4 book ai didi

c# - GZIP Compression Java/C# 在压缩问题上的区别

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:31 27 4
gpt4 key购买 nike

我正在为我的项目添加压缩,目的是提高从 Android 应用程序到 ASP.NET C# 服务器的 3G 数据通信速度。

我研究/编写/测试的方法有效。但是,压缩后会添加空白。它们也不同。这让我很困惑。

这是否与 Java/ASP.NET C# 中 GZIP 类的不同实现有关?这是我应该关心的事情,还是我在解压缩后继续使用 .Trim() 和 .trim()?


Java,压缩“Mary had a little lamb”给出:

压缩数据长度:42
Base64压缩字符串:H4sIAAAAAAAAAPNNLKpUyEhMUUhUyMksKclJVchJzE0CAHrIujIWAAAA

protected static byte[] GZIPCompress(byte[] data) {
try {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
GZIPOutputStream gZIPOutputStream = new GZIPOutputStream(byteArrayOutputStream);

gZIPOutputStream.write(data);
gZIPOutputStream.close();

return byteArrayOutputStream.toByteArray();
} catch(IOException e) {
Log.i("output", "GZIPCompress Error: " + e.getMessage());
return null;
}
}


ASP.NET C#,压缩“Mary had a little lamb”

压缩数据长度:137
Base64 Compressed String: H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ir7I6ut0ns3SLC2Lti3ztMwWk/8Hesi6MhYAAAA=

    public static byte[] GZIPCompress(byte[] data)
{
using (MemoryStream memoryStream = new MemoryStream())
{
using (GZipStream gZipStream = new GZipStream(memoryStream, CompressionMode.Compress))
{
gZipStream.Write(data, 0, data.Length);
}

return memoryStream.ToArray();
}
}

最佳答案

我在 .NET 上也得到 42 个字节。我怀疑您使用的是旧版本的 .NET,它的压缩方案存在缺陷。

这是我使用您的代码的测试应用:

using System;
using System.IO;
using System.IO.Compression;
using System.Text;

class Program
{
static void Main(string[] args)
{
var uncompressed = Encoding.UTF8.GetBytes("Mary had a little lamb");
var compressed = GZIPCompress(uncompressed);
Console.WriteLine(compressed.Length);
Console.WriteLine(Convert.ToBase64String(compressed));
}

static byte[] GZIPCompress(byte[] data)
{
using (var memoryStream = new MemoryStream())
{
using (var gZipStream = new GZipStream(memoryStream,
CompressionMode.Compress))
{
gZipStream.Write(data, 0, data.Length);
}

return memoryStream.ToArray();
}
}
}

结果:

42
H4sIAAAAAAAEAPNNLKpUyEhMUUhUyMksKclJVchJzE0CAHrIujIWAAAA

这与 Java 数据完全相同。

我正在使用 .NET 4.5。我建议你尝试在你的机器上运行上面的代码,并比较结果。

我刚刚解压缩了您提供的 base64 数据,它“Mary had a little lamb”的有效“压缩”形式,在未压缩数据中有 22 个字节。这让我感到惊讶...并强化了我的理论,即这是框架版本差异。

编辑:好的,这绝对是框架版本差异。如果我使用 .NET 3.5 编译器编译,然后使用 app.config 强制它使用该版本的框架运行,我也会看到 137 个字节。鉴于评论,这似乎仅在 .NET 4.5 中得到修复。

关于c# - GZIP Compression Java/C# 在压缩问题上的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17358007/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com