我正在为我的项目添加压缩,旨在提高从Android应用程序到ASP.NET C#Server的3G数据通信的速度.
我研究/编写/测试过的方法很有效.但是,压缩后会增加空白区域.它们也有所不同.这真让我困惑.
是否与Java/ASP.NET C#中的GZIP类的不同实现有关?这是我应该关注的事情,还是在解压后我继续使用.Trim()和.trim()?
Java,压缩"玛丽有一只小羊羔"给出:
压缩数据长度: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;
}
}
Run Code Online (Sandbox Code Playgroud)
ASP.NET C#,压缩"玛丽有一只小羊羔"
压缩数据长度:137
的Base64压缩字符串: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();
}
}
Run Code Online (Sandbox Code Playgroud)
我在.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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
42
H4sIAAAAAAAEAPNNLKpUyEhMUUhUyMksKclJVchJzE0CAHrIujIWAAAA
Run Code Online (Sandbox Code Playgroud)
这与Java数据完全相同.
我正在使用.NET 4.5.我建议你尝试在你的机器上运行上面的代码,并比较结果.
我刚解压缩你提供的base64数据,它是一个有效的"压缩"形式的"玛丽有一只小羊羔",在未压缩的数据中有22个字节.这让我感到惊讶......并强化了我的理论,即它是框架版本的差异.
编辑:好的,这绝对是框架版本的差异.如果我使用.NET 3.5编译器进行编译,那么使用app.config强制它与该版本的框架一起运行,我也看到了137个字节.鉴于评论,它看起来只在.NET 4.5中得到修复.
| 归档时间: |
|
| 查看次数: |
1564 次 |
| 最近记录: |