C#中关于压缩数据流和解压数据流的实现

c#中压缩数据流的方法,其实就是把一个对象压缩为byte数组

在网上找了很久没有找到自己满意的方法,有一些方法是可以压缩但是不是我想要的效果

//long value = 100;
            string value = "this is test!this is test!12312312333333333333333333333333333333333333333333333333333333333333333333333333333";
            var ms = new System.IO.MemoryStream();
            var bw = new System.IO.BinaryWriter(ms, System.Text.Encoding.Unicode);
            bw.Write(value);
           
            //byte[] buf = ms.ToArray();
            var dest = new System.IO.MemoryStream();
            GZipStream zipStream = new GZipStream(dest, CompressionMode.Compress, true);
            byte[] buf = new byte[1024];
            int len;
            ms.Seek(0, SeekOrigin.Begin);
            while ((len = ms.Read(buf, 0, buf.Length)) > 0)
            {
                zipStream.Write(buf, 0, len);
            }
            //zipStream.Write(buf, 0, buf.Length);//可以
            zipStream.Close();
            bw.Close();
            ms.Close();
            byte[] cb = dest.ToArray();

            var tmp = new System.IO.MemoryStream();
            tmp.Write(cb, 0, cb.Length);
            tmp.Seek(0, SeekOrigin.Begin);
            var dest2 = new System.IO.MemoryStream();
            GZipStream zipStream2 = new GZipStream(tmp, CompressionMode.Decompress, true);
            byte[] buf2 = new byte[1024];
            int len2;
            while ((len2 = zipStream2.Read(buf2, 0, buf2.Length)) > 0)
            {
                   dest2.Write(buf2, 0, len2);
            }
            //zipStream2.CopyTo(dest2); //可以
            zipStream2.Close();
            dest2.Seek(0, SeekOrigin.Begin);
            var br = new System.IO.BinaryReader(dest2, System.Text.Encoding.Unicode);
            //long t = br.ReadInt64();
            string t = br.ReadString();

这个是我找到的一个可以将任何数据转为压缩的二进制流然后解压的




 string value = "this is test!12312312333333333333333333333333333333333333333333333333333333333333333333333333333";
            byte[] b=Encoding.Default.GetBytes(value);
            MemoryStream ms = new MemoryStream();
            GZipStream zip = new GZipStream(ms, CompressionMode.Compress);
            zip.Write(b, 0, b.Length);
            zip.Close();
            byte[] cb=ms.ToArray();

            MemoryStream tempMs = new MemoryStream();
            MemoryStream dms = new MemoryStream(cb);
            GZipStream dzip = new GZipStream(dms, CompressionMode.Decompress);
            dzip.CopyTo(tempMs); 
            dzip.Close();
            byte[] db = tempMs.ToArray();
            string ds=Encoding.Default.GetString(db);

这是另外一种

long value = 100;
            var ms = new System.IO.MemoryStream();
            var bw = new System.IO.BinaryWriter(ms, System.Text.Encoding.Unicode);
            bw.Write(value);
            bw.Close();
            byte[] buf=ms.ToArray();
            ms.Close();

            var ms2 = new System.IO.MemoryStream();
            ms2.Write(buf, 0, buf.Length);
            ms2.Seek(0, SeekOrigin.Begin);
            var br = new System.IO.BinaryReader(ms2, System.Text.Encoding.Unicode);
            long tmp=br.ReadInt64();


这三种都可以,但是第一种才是我想要的效果,可以把流压缩了,在解压!

主要用于 网络传输中包的编解码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值