MemoryStream 的GetBuffer() 和 ToArray()的区别
来源:互联网 发布:淘宝网女式运动套装 编辑:程序博客网 时间:2024/06/05 12:47
近日在开发压缩数据程序的过程中,有一段代码:
public List<string> CompressString(string xmlStr)
{
byte[] bytes = Encoding.Default.GetBytes(xmlStr);
MemoryStream ms = new MemoryStream();
GZipStream gzip = new GZipStream(ms, CompressionMode.Compress);
gzip.Write(bytes, 0, bytes.Length);
gzip.Flush();
gzip.Close();
byte[] gzipBytes = ms.GetBuffer();
ms.Close();
string hexStr = byteArrayToHexString(gzipBytes);
return SplitString(hexStr);
}
其中 gzipBytes 后面总是有很多 0 的字节。 而且 gzipBytes 的大小也远远 大于 预期的值。
查了 MSDN 后知道, GetBuffer 是把 stream 中的 buffer 的引用传递出来, buffer 的大小是由 stream的 Capacity来决定的。 因为只是地址的引用传递,所以 GetBuffer() 速度很快,但是却把 很多没用到的 空数据做占用的地址空间也传递出来了。
ToArray() 是 将 MemoryStream的 数据复制到一个 byte[] 中,因此速度要比 GetBuffer() 慢,但是它不会将无用的空数据放在 byte[] 中,所以在这里,考虑到后者是我们所关注的焦点,把代码改为:
public List<string> CompressString(string xmlStr)
{
byte[] bytes = Encoding.Default.GetBytes(xmlStr);
MemoryStream ms = new MemoryStream();
GZipStream gzip = new GZipStream(ms, CompressionMode.Compress);
gzip.Write(bytes, 0, bytes.Length);
gzip.Flush();
gzip.Close();
byte[] gzipBytes = ms.ToArray();
ms.Close();
string hexStr = byteArrayToHexString(gzipBytes);
return SplitString(hexStr);
}
- MemoryStream 的GetBuffer() 和 ToArray()的区别
- toArray()与toArray(T [] a)的区别
- 无参toArray 和有参数toArray(T[]contents)的区别
- CString 的getbuffer和releasebuffer~
- CString的GetBuffer和ReleaseBuffer
- Spark中DenseMatrix中values()和toArray方法的区别
- C# BufferedStream 与MemoryStream 的区别
- aslist 和 toArray 的探究
- 集合转数组的toArray()和toArray(T[] a)方法
- 集合转数组的toArray()和toArray(T[] a)方法
- toArray()和toArray(Object a[ ]) 区别
- 关于CString的GetBuffer 和 ReleaseBuffer
- MFC 中GetBuffer()和ReleaseBuff()的使用
- 关于CString的GetBuffer 和 ReleaseBuffe
- 关于CString的GetBuffer 和 ReleaseBuffe
- 关于CString的GetBuffer 和 ReleaseBuffe
- 关于CString的GetBuffer 和 ReleaseBuffe .
- CString:Getbuffer和Releasebuffer的作用
- Oracle 取随机数
- 用 syslog 改进和调试 PHP 应用程序
- Hibernate 延迟加载的错误 failed to lazily initialize a collection of role [Hibernate]
- CSS浏览器兼容问题整理(IE6.0、IE7.0 与 FireFox)
- 课程 Java程序设计5:Arrays (怀旧版)
- MemoryStream 的GetBuffer() 和 ToArray()的区别
- 网络函数库
- 图形、游戏,IT资讯的相关网站
- dataset、dataview、 datatable、 datacolum、datarow的关系一
- 纯CSS仿微软经典菜单
- 离职的代价
- dataset、dataview、 datatable、 datacolum、datarow的关系
- 用.net 编码实现朗读文本的方法
- dataset、dataview、 datatable、 datacolum、datarow的关系