这是改进我的 Perl 的尝试 :通过更彻底地解释我正在尝试做的事情来寻找和读取位,而不是字节。
我有 x,一个 9136 x 42 的整数数组,我想将它超高效地存储在文件中。整数具有以下约束:
x[0..9135][0] 中的所有 9136 个整数都在 -137438953472 和 137438953471 之间,因此可以使用 38 位存储。
x[0..9135][1] 中的所有 9136 个整数都在 -16777216 和 16777215 之间,因此可以使用 25 位存储。
依此类推...(整数位约束是预先知道的;Perl 不必计算它们)
问题:使用 Perl,我如何有效地将这个数组存储在一个文件中?
笔记:
如果一个整数可以存储为 25 位,那么它也可以存储为 4 个字节(32 位),如果您愿意浪费 7 位。然而,在我的情况下,每一点都很重要。
我想使用文件 seek() 快速查找数据,而不是通过文件顺序读取。
该数组通常以 x[i] 的形式访问。换句话说,我想要与给定 x[i] 对应的 42 个整数,因此这 42 个整数应该彼此靠近存储(理想情况下,它们应该在文件中彼此相邻存储)
我最初的方法是只放置一个比特流,然后找到一种方法将其读回并将其改回整数。我最初的问题集中在这个问题上,但对于我没有看到的更大问题,也许有更好的解决方案。
关于我在做什么的太多细节: