在网络上进行通信,压缩通信对于传输效率来讲非常重要,特别是要传输的内容比较复杂时。下面就以压缩String对象为例,介绍一下压缩和解压任意对象的方法(无论什么对象都可以序列化为byte流):
先建立压缩类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.IO.Compression;
namespace Felomeng
{
public class MyZip
{
public static MemoryStream Compress(byte[] inBytes)
{
MemoryStream outStream = new MemoryStream();
using (MemoryStream intStream = new MemoryStream(inBytes))
{
using (GZipStream Compress =
new GZipStream(outStream,
CompressionMode.Compress))
{
intStream.CopyTo(Compress);
}
}
return outStream;
}
public static byte[] Decompress(MemoryStream inStream)
{
byte[] result = null;
MemoryStream compressedStream = new MemoryStream(inStream.ToArray());
using (MemoryStream outStream = new MemoryStream())
{
using (GZipStream Decompress = new GZipStream(compressedStream,
CompressionMode.Decompress))
{
Decompress.CopyTo(outStream);
result = outStream.ToArray();
}
}
return result;
}
}
}
用法如下所示:
String myString = "testCompress", //测试用string
result;// 解压后结果
MemoryStream outFile = new MemoryStream();//outFile就是压缩后存放的地方,用于网络传输的对象
outFile = Compress(Encoding.UTF8.GetBytes(myString));// 压缩源字符串
result = Encoding.UTF8.GetString(Decompress(outFile));// 解压得到源字符串
如果想得到更好的压缩结果,可以使用比系统提供的GZipStream更好的压缩算法。
原文地址:点击打开链接