これは私の Perl を改善する試み です:私がやろうとしていたことをより徹底的に説明することにより、バイトではなくビットをシークして読み取ります。
ファイルに非常に効率的に格納したい 9136 x 42 の整数配列 x があります。整数には次の制約があります。
x[0..9135][0] の 9136 個の整数はすべて -137438953472 から 137438953471 の間にあるため、38 ビットを使用して格納できます。
x[0..9135][1] の 9136 個の整数はすべて -16777216 から 16777215 の間であるため、25 ビットを使用して格納できます。
など... (整数ビットの制約は事前にわかっています; Perl はそれらを計算する必要はありません)
質問: Perl を使用して、この配列をファイルに効率的に格納するにはどうすればよいですか?
ノート:
整数を 25 ビットで格納できる場合は、7 ビットを無駄にしたくない場合は、4 バイト (32 ビット) で格納することもできます。ただし、私の状況では、すべてのビットが重要です。
ファイルを順番に読み取るのではなく、ファイル seek() を使用してデータをすばやく検索したい。
配列は通常 x[i] としてアクセスされます。つまり、特定の x[i] に対応する 42 個の整数が必要なので、これらの 42 個の整数は互いに近くに格納する必要があります (理想的には、ファイル内で互いに隣接して格納する必要があります)。
私の最初のアプローチは、ビットストリームを置いてから、それを読み戻して整数に戻す方法を見つけることでした。私の最初の質問はそれに焦点を当てていましたが、おそらく私が見ていないより大きな問題に対するより良い解決策があるでしょう.
私がやっていることの詳細が多すぎる: