分享一个压缩字节数组数据的类库
作者:admin 来源:原创 2023/7/11 12:43:39

一、本文分享一个压缩字节数组数据的类库

    在编写网络通信程序中,客户端和服务端之间需要通信,通信的格式通常是字节数组,也就是byte[]。

    发送的函数通常是

    byte[] data=new byte[100]; 

    socket.send(data);

    考虑到网络带宽,如果可以尽可能得减少发送的字节数量,网络程序将更健壮,占用内存更低,反正可能更好。

二、System.IO.Compression

    System.IO.Compression命名空间包含以下类来对文件和流进行压缩或解压缩。 还可以使用这些类型来读取和修改压缩文件的内容:
    (1)ZipFile
    (2)ZipArchive

    (3)ZipArchiveEntry
    (4)DeflateStream
    (5)GZipStream

    来源于:https://learn.microsoft.com/zh-cn/dotnet/standard/io/how-to-compress-and-extract-files

三、压缩字节数组数据

    public static byte[] Compress(byte[] data, int offset, int lenght)
        {
            byte[] buffer = null;
            try
            {
                MemoryStream ms = new MemoryStream();
                GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true);
                zip.Write(data, offset, lenght);
                zip.Close();
                buffer = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(buffer, 0, buffer.Length);
                ms.Close();
            }
            catch { }
            return buffer;
        }
四、解压缩字节数组

    于文末下载源码。

五、测试

            string str = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
            Console.WriteLine("原文:" + str);
            byte[] buffer = Encoding.Default.GetBytes(str);
            Console.WriteLine("原字节长度:"+buffer.Length);
            byte[] b = GZipHelper.Compress(buffer);
            Console.WriteLine("压缩后字节长度:" + b.Length);
            Console.WriteLine("减少:" + (buffer.Length-b.Length));
            byte[] c = GZipHelper.Decompress(b);
            Console.WriteLine("解压缩后字节长度:" + c.Length);
            Console.WriteLine("原文:" + Encoding.Default.GetString(buffer));

    测试时写的原文内容是103个相同的字符“1”,在压缩率会相当高,若改成没有规律的字符串,压缩率会低很多。


  我已将代码上传,下载码是:C0314C805D

    下载码是啥?如何下载=》点击查看


称      呼:
联系方式:
您的评论:
技术支持:l.w.dong@qq.com www.luweidong.cn
广州市   wx:lwdred
Copyright © 2014 三味书屋 All Rights Reserved
技术支持:l.w.dong@qq.com  sitemap xml  sitemap html

粤公网安备44010602011869号

粤ICP备13031080号-1