gpt4 book ai didi

c# - GZipStream 有效性

转载 作者:太空狗 更新时间:2023-10-29 20:00:21 29 4
gpt4 key购买 nike

我正在尝试将大型 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 缓冲区创建文件流 FileStream fs = new FileStream(文件名, FileMode.Create, FileAccess.Write, FileShare.None, 65536); GZipStream cmp = new GZipStream(fs, CompressionMode.Compress); ...

GZipStream cmp = new GZipStream(File.Open(cacheFileName, FileMode.Create), CompressionMode.Compress);
BufferedStream buffStrm = new BufferedStream(cmp, 65536);
BinaryWriter fs = new BinaryWriter(buffStrm);

这样,GZipStream获取 64 KB block 中的数据,并且可以更好地压缩。

大于 64KB 的缓冲区不会给你更好的压缩。

关于c# - GZipStream 有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588785/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com