gpt4 book ai didi

c++ - 随时随地压缩/解压缩数据

转载 作者:行者123 更新时间:2023-11-30 01:19:14 25 4
gpt4 key购买 nike

我正在运行一个物理模拟,我想改进它处理数据的方式。我保存和读取的文件包含一个 float ,然后是两个整数,最后是 512*512 = 262144 +1 或 -1,每个数据文件的权重为 595 kb。所有这些数字都由一个空格分隔。

我正在保存数十万个这样的文件,所以它很快就会增加到千兆的存储空间,我想知道是否有一种快速的(希望是 cpu-effort-wise 方式)压缩和解压缩这种类型移动中的数据(我的意思是在使用前/后不压缩/解压缩)。

我最终可以节省多少钱?

最佳答案

如果您想要相对快速的读写,您可能希望以“二进制”格式存储和读取它们,即它们以字节为单位的内部存储方式。 float 使用 4 个字节的数据,在存储大量数据时不需要任何类型的“分隔符”。

为此,您可以考虑 boost's "serialize" library .

请注意,使用数据压缩方法(zlib 等)可以节省存储的字节数,但压缩和解压缩它们以供使用的速度相对较慢。

以二进制格式存储不仅会使用更少的磁盘存储(比以文本格式存储),而且性能应该更高,不仅因为文件 I/O 更少,而且因为没有字符串写入/解析正在进行.

请注意,当您输入/输出到 binary_iarchivebinary_oarchive 时,您会传入一个底层 istreamostream如果这是一个文件,您需要使用 ios::binary 标志打开它,因为行尾可能会被转换。

即使您决定采用数据压缩(zlib 或其他库),仍然值得使用 boost::serialize 将数据放入“blob”中进行压缩。在这种情况下,您可能会使用 std::ostringstream 作为输出流来创建 blob。

顺便说一下,如果你有 2^18 个“ bool ”值,它们只能是 1 或 -1,那么每个值只需要 1 位,(它们在物理上存储为 1 或 0,但你会在逻辑上转换它) .那将达到 2^15 字节,即 32K 而不是 595K

关于c++ - 随时随地压缩/解压缩数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21136882/

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