c#实现与Java无差异的GZip压缩和GZip解压缩
2024-10-16
42
c#实现与Java无差异的GZip压缩和GZip解压缩,其中有个坑就是GZip压缩的时候,只有在GZipStream在Dispose后调应对应MemoryStream.ToArray()所得到的结果才是正确的压缩数据。如果在zipStream.Write(bytes, 0, bytes.Length);后面直接return compressedStream.ToArray();返回的数据是不正确的,大家可以试一下。
/// <summary>
/// GZip压缩
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static byte[] GZzipCompress(byte[] bytes)
{
using (var compressedStream = new MemoryStream())
{
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
{
zipStream.Write(bytes, 0, bytes.Length);
}
return compressedStream.ToArray();
}
}
/// <summary>
/// GZip解压缩
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static byte[] GZzipDecompress(byte[] bytes)
{
using (var compressStream = new MemoryStream(bytes))
{
using (var zipStream = new GZipStream(compressStream, CompressionMode.Decompress))
{
using (var resultStream = new MemoryStream())
{
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
}
}
另外,在网上看到有人说C#压缩的数据和Java不一样,头上会比Java的多4个字节,笔者亲自测试用以上方法压缩的结果和Java是一样的,大家也可以亲测一下。
更新于:1个月前赞一波!1
相关文章
- .NET C# EntityFramework(EF)连接SQLite代码示例
- .NET9 C# 13 有哪些新特性?
- C#中的String和StringBuilder的区别
- .NET C#中的IEnumerable和IEnumerator的区别
- C# Const 和 ReadOnly的区别
- C# 使用Barrier进行多线程同步
- C#发送邮件代码简洁示例(附源码下载)
- C# Word转换成Pdf的方法
- c#使用MongoDB开发LBS应用
- hprose for C#使用教程
- .NET Core c#使用SkiaSharp压缩裁切图片去除水印
- c# decimal保留2位小数 并向下舍入
- .NET Core c#使用SkiaSharp压缩图片
- C#复制文件到指定文件夹
- c#获取枚举的Description
- c#读取pdf里的表格
- c# HttpClient下载图片
- c#使用HtmlAgilityPack编辑html并保存
- c#获取文件夹所有文件列表
- c# int数值转enum枚举
文章评论
评论问答