3

ELF、画像などのファイルタイプを示す一連のマジック バイトと一致しない場合にのみ、grep や file などのツールを組み合わせてファイル内のものを条件付きで grep しようとするディレクトリ ツリー スキャン関数を D で作成しています。

ファイル io の最小化に関して、このような除外ロジックを可能な限り高速に実行するための最良のアプローチは何ですか? 最初にいくつかのマジック バイトを読み取るだけでよい場合は、通常、ファイル全体を読み取りたくありません。ただし、コードをより一般的なものにするために (一部の魔法は最後または最初以外の場所にある可能性があります)、mmap のようなインターフェイスを使用して、ディスクからデータを遅延取得する場合にのみ、ディスクからデータを遅延取得できると便利です。読んだ。配列インターフェイスは、私のアルゴリズムも簡素化します。

この場合、 Dstd.mmfileが最適なオプションですか?

更新: この投稿によると、mmap が推奨されていると思います: http://forum.dlang.org/thread/dlrwzrydzjusjlowavuc@forum.dlang.org

配列 (opIndex) としての読み取りアクセスのみが必要な場合、std.mmfileoverstd.stdio.Fileまたはを使用することの短所はありますかstd.file?

4

2 に答える 2

3

と を組み合わせseekて、rawread必要std.stdio.Fileなことを行うことができます

その後、最初の数バイトに対してのみ rawRead を実行できます

File file=//...

ubyte[1024] buff;
ubtye[] magic=file.rawRead(buff[0..4]);//only the first 4 bytes are read
//check magic

OS のキャッシング/先読み戦略によっては、これは mmfile とほぼ同じ速度になる可能性がありますが、複数のシークは先読み動作を台無しにします

于 2013-09-19T10:00:21.067 に答える