C#中将字符串通过GZipStream进行压缩时的注意事项
2012-12-20 20:10
323 查看
背景,
今天在写代码时要用到GZipStream来压缩需要Web传输的数据块。原本以为GZipStream Write ->Flush ->读取对应MemoryStream数据就Okay的事情,却总是得不到正确的结果。研究,
经过查询MSDN,原来只有在GZipStream被Dispose后,对应的MemoryStream中才会有真正的压缩数据被写入。以下是我用来测试的代码片段(红色部分为原来的错误调用,橙色部分是正确的调用方式)
string data = "<Root><PIGContent>test</PIGContent><RemoteUrl>http://www.a.com</RemoteUrl></Root>";
byte[] buffer = System.Text.UTF8Encoding.UTF8.GetBytes(data);
byte[] compressedbuffer = null;
//Compress buffer
MemoryStream ms = new MemoryStream();
using(GZipStream zs = new GZipStream(ms, CompressionMode.Compress,true))
{
zs.Write(buffer, 0, buffer.Length);
//下面两句被注释掉的代码有问题, 对应的compressedbuffer的长度只有10--该10字节应该只是压缩buffer的header
//zs.Flush();
//compressedbuffer = ms.ToArray();
}
//只有GZipStream在Dispose后调应对应MemoryStream.ToArray()所得到的Buffer才是我们需要的结果
compressedbuffer = ms.ToArray();
总结,
相信大家都会对GZipstream这种别扭的操作方式表示不满,微软对此也表示过歉意,但是由于其考虑到要兼容就的代码,因此即使在.Net 4.5中你还是得忍受这种不和谐的代码。本篇小结如有不妥之处,烦请指正。
相关文章推荐
- C#实现通过Gzip来对数据进行压缩和解压
- C#使用GZipStream压缩与解压字符串
- 如何压缩多个文件/文件夹(GZipStream and C#)
- c# 使用GZipStream压缩和解压流
- C#压缩与解压缩流类 GZipStream 的使用
- 如何压缩多个文件/文件夹(GZipStream and C#)
- eval解析JSON中的注意点 在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数。 2. 使用Function对象来进行返回解析。 使用eval
- 使用.Net自带的GZipStream进行流压缩与解压
- LoadRunner中,利用zlib.dll对字符串进行gzip压缩
- 如何压缩多个文件/文件夹(GZipStream and C#)
- C# 通过hessian调Java注意事项
- 如何压缩多个文件/文件夹(GZipStream and C#)
- 对字符串,字节数组进行GZIP压缩和解压缩
- 关于unity c#脚本中将string字符串进行分割
- 如何压缩多个文件/文件夹(GZipStream and C#)
- C# 通过hessian调Java注意事项
- C# GZip对字符串压缩和解压
- C# 用GZipStream 压缩流来压缩和解压文件
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc
- 关于几种语言(c#,php,python,javascript)字符串的gzip压缩与解压的整理