C#中将字符串通过GZipStream进行压缩时的注意事项
来源:互联网 发布:程序员转行能做什么 编辑:程序博客网 时间:2024/04/30 06:26
背景,
今天在写代码时要用到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#中将字符串通过GZipStream进行压缩时的注意事项
- GZipStream压缩解压字符串
- C# GZipStream 压缩 解压
- C#压缩与解压缩流类 GZipStream 的使用
- c# 使用GZipStream压缩和解压流
- 【C#笔记】BZip2OutputStream和GZipStream压缩问题
- GZipStream实现压缩以及出现的问题
- GZipStream实现压缩以及出现的问题
- GzipStream 实现文本文件的(压缩--解压)
- C# GZipStream
- 在C#中用GZipStream压缩与解压数据
- 在C#中用GZipStream压缩与解压数据
- C# GZipStream压缩与解压缩(针对文件)
- C# 关于GZipStream压缩与解压缩数据丢失问题
- 关于unity c#脚本中将string字符串进行分割
- GZipstream压缩解压文件夹
- GzipStream压缩解压示例
- 基于GZipStream的多文件压缩组件TGZipCompressBar实现
- assert在release版本下也执行的问题
- 实现分页查询
- WinCE驱动的动态加载
- 全国青少年信息学奥林匹克竞赛培训---pascal基础(3)顺序结构
- html 中使用Frame
- C#中将字符串通过GZipStream进行压缩时的注意事项
- linux 系统指令
- 用1,2,3,4,5组成不重复5位数,4不能在第三位,3与5不能相连(最简单的办法)
- shell
- 厦大包打听之今生来世
- 在内存中的显示缓存区中显示移动的汉字”中“字
- java中常用的一些方法
- matlab 编译器设置
- linux操作系统安装输入法