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

全栈工程师开发手册 (作者:栾鹏)
c#教程全解

c#实现gzip压缩解压缩byte[]字节数组,文件,字符串。

测试代码

static void Main()
{
    //测试字符串
    String inputStr = "zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org";
    System.Console.WriteLine("原文:\t" + inputStr);

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

    byte[] data = gzipCompress(input);
    System.Console.WriteLine("压缩后:\t");
    System.Console.WriteLine("长度:\t" + data.Length);

    byte[] output = gzipDecompress(data);
    String outputStr = System.Text.Encoding.Default.GetString(output);
    System.Console.WriteLine("解压缩后:\t" + outputStr);
    System.Console.WriteLine("长度:\t" + output.Length);

    //测试文件
    FileStream fos = new FileStream("test.txt",FileMode.OpenOrCreate);
    fos.Write(input,0,input.Length);
    fos.Flush();
    fos.Close();

    gzipCompress("test.txt", false);
    gzipDecompress("test.txt.gz", false);
    FileStream fis = new FileStream("test.txt", FileMode.Open);
    byte[] data1 = new byte[(int)fis.Length];
    fis.Read(data1, 0, data1.Length);
    fis.Close();
    outputStr = System.Text.Encoding.Default.GetString(data1);
    System.Console.WriteLine("解压缩后:\t" + outputStr);  
}

gzip压缩解压缩函数的实现

 //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);
            }
        }
        //文件压缩 ,默认删除原始文件
        public static void gzipCompress(string file)
        {
            gzipCompress(file, true);
        }  

        //文件压缩 是否删除原始文件 
        public static void gzipCompress(string file, bool delete)
        {
            FileStream fis = new FileStream(file,FileMode.Open);
            FileStream fos = new FileStream(file + ".gz", FileMode.OpenOrCreate, FileAccess.Write);

            gzipCompress(fis, fos);

            fis.Close();
           // fos.Flush();
            fos.Close();

            if (delete)
            {
                File.Delete(file);
            }
        }  
        //数据压缩 
        public static void gzipCompress(Stream input, Stream output)
       {  
            GZipOutputStream gos = new GZipOutputStream(output);  
  
            int count;  
            byte[] data = new byte[1024];
            while ((count = input.Read(data, 0, 1024)) >0)
            {  
                gos.Write(data, 0, count);  
            }  
            gos.Finish();  
            gos.Flush();  
            gos.Close();  
        }  

        //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);
            }
        }
        //文件解压缩 ,默认删除源文件
        public static void gzipDecompress(string path)
        {
            gzipDecompress(path, true);
        }  
        //文件解压缩  是否删除原始文件 
        public static void gzipDecompress(string file, bool delete){  
            FileStream fis = new FileStream(file,FileMode.Open);  
            FileStream fos = new FileStream(file.Replace(".gz",  ""),FileMode.OpenOrCreate);  
            gzipDecompress(fis, fos);  
            fis.Close();  
            fos.Flush();  
            fos.Close();  
  
            if (delete) {  
                File.Delete(file);  
            }  
        }  
  
        //数据解压缩 
        public static void gzipDecompress(Stream input, Stream output){  
            GZipInputStream gis = new GZipInputStream(input);  
            int count;  
            byte[] data = new byte[1024];  
            while ((count = gis.Read(data, 0, 1024)) >0) {  
                output.Write(data, 0, count);  
            }  
            gis.Close();  
        }  
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾讯AI架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值