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();
这三种都可以,但是第一种才是我想要的效果,可以把流压缩了,在解压!
主要用于 网络传输中包的编解码