雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

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

文章评论

评论问答