您的位置:首页 > 编程语言 > C#

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

2014-08-26 19:03 337 查看
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();


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

主要用于 网络传输中包的编解码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: