c#实现gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩

转载:https://blog.csdn.net/luanpeng825485697/article/details/78165788

 

我测试了下压缩byte[],是可以的

复制代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using UnityEngine;

public class TestByteAttay : MonoBehaviour {

    // Use this for initialization
    void Start () {
        //测试字符串
        string inputStr = "zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org";
        print("原文:\t" + inputStr);

        byte[] input = System.Text.Encoding.Default.GetBytes(inputStr);
        print("长度:\t" + input.Length);

        byte[] data = gzipCompress(input);
        print("压缩后:\t");
        print("长度:\t" + data.Length);
    }
    
    // Update is called once per frame
    void Update () {
        
    }

    void YaSuo()
    {
        
    }
    
    //gzip字节数组压缩  
    public static byte[] gzipCompress(byte[] data)
    {
        try
        {
            MemoryStream ms = new MemoryStream();
            GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true);
            zip.Write(data, 0, data.Length);
            zip.Close();
            byte[] buffer = new byte[ms.Length];
            ms.Position = 0;
            ms.Read(buffer, 0, buffer.Length);
            ms.Close();
            return buffer;

        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
    }

    
    //gzip字节数组解压缩  
    public static byte[] gzipDecompress(byte[] data)
    {
        try
        {
            MemoryStream ms = new MemoryStream(data);
            GZipStream zip = new GZipStream(ms, CompressionMode.Decompress, true);
            MemoryStream msreader = new MemoryStream();
            byte[] buffer = new byte[0x1000];
            while (true)
            {
                int reader = zip.Read(buffer, 0, buffer.Length);
                if (reader <= 0)
                {
                    break;
                }
                msreader.Write(buffer, 0, reader);
            }
            zip.Close();
            ms.Close();
            msreader.Position = 0;
            buffer = msreader.ToArray();
            msreader.Close();
            return buffer;
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
    }
}
复制代码

 

posted @   三页菌  阅读(1558)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2017-11-27 Unity3D游戏轻量级xlua热修复框架
2017-11-27 c#字典排序
点击右上角即可分享
微信分享提示