c# – GZipStream有效性
发布时间:2020-12-15 08:09:57 所属栏目:百科 来源:网络整理
导读:我想将大的UInt16数组保存到文件中. positionCnt约为50000,stationCnt约为2500.直接保存,没有GZipStream,文件大约250MB,可以通过外部zip程序压缩到19MB.使用以下代码,该文件为507MB.我做错了什么? GZipStream cmp = new GZipStream(File.Open(cacheFileName
我想将大的UInt16数组保存到文件中. positionCnt约为50000,stationCnt约为2500.直接保存,没有GZipStream,文件大约250MB,可以通过外部zip程序压缩到19MB.使用以下代码,该文件为507MB.我做错了什么?
GZipStream cmp = new GZipStream(File.Open(cacheFileName,FileMode.Create),CompressionMode.Compress); BinaryWriter fs = new BinaryWriter(cmp); fs.Write((Int32)(positionCnt * stationCnt)); for (int p = 0; p < positionCnt; p++) { for (int s = 0; s < stationCnt; s++) { fs.Write(BoundData[p,s]); } } fs.Close(); 解决方法
不确定您正在运行的.NET版本.在早期版本中,它使用的窗口大小与您编写的缓冲区大小相同.所以在你的情况下,它会尝试单独压缩每个整数.我认为他们在.NET 4.0中改变了这一点,但尚未验证.
无论如何,您要做的是在GZipStream之前创建一个缓冲流: //使用64 KB缓冲区创建文件流 GZipStream cmp = new GZipStream(File.Open(cacheFileName,CompressionMode.Compress); BufferedStream buffStrm = new BufferedStream(cmp,65536); BinaryWriter fs = new BinaryWriter(buffStrm); 这样,GZipStream以64 KB的块的形式获取数据,并且可以更好地进行压缩. 大于64KB的缓冲区不会给你更好的压缩. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |