10

私は大きなファイル (4 ギガ以上) を持っています。たとえば、4 バイトのフロートです。map、filter、foldlなどを使用できるようにしたいという意味で、リストとして扱いたいと思います。しかし、出力で新しいリストを作成する代わりに、出力を書き戻したいと思いますしたがって、ファイルのごく一部をメモリにロードするだけで済みます。MutableFileList と呼ばれるタイプと言えます

誰かが以前にこの状況に遭遇したことがありますか? 車輪を再発明する代わりに、これに対処するためのハック的な方法があるかどうか疑問に思っていましたか?

4

3 に答える 3

13

メモリ内の[Double]orとして扱わないでください。[Float]あなたができることは、 uvector/vector/... などのリストのようなパックされた配列タイプの 1 つを mmapFile または readFile と一緒に使用して、一度にファイルのチャンクを取り込み、それらを処理することです。または、遅延バイト文字列と同等の遅延パック配列型を使用します。

于 2009-12-18T01:52:36.927 に答える
9

これはあなたにとって非常に役立つはずです。あなたはあなたがする必要があることのためにそしてあなたがする必要があることのために使うことができますreadFilewriteFileそしてすべては怠惰に行われます。それはそれらがまだ使用されている間だけメモリに物事を保持するので、あなたはあなたのコンピュータを爆破することなくファイルを読んだり、処理したり、書いたりすることができます。

于 2009-12-18T01:27:19.490 に答える
1

mmapファイルをメモリにマップしてから処理するために使用できます。mmapされたファイルの読み取りと書き込みを約束し、遅延マップされたファイルのチャンクを処理することもできるmmapモジュールがありますが、私は試していません。

マップされたファイルに書き込むためのインターフェイスは非常に低レベルのように思われるため、独自の抽象化を構築するか、操作する必要がありますForeign.Ptr

于 2009-12-18T01:22:37.163 に答える