2

ファイルから読み取った (4KB-16MB) チャンクがすべてゼロかどうかをすばやく判断する方法はありますか?

各バイトをチェックして、チャンクを反復処理できます。明らかな最適化がありますが、O(N) のままです。

私のユースケースはスパースファイルです。私が読んだばかりのチャンクがどのディスクストレージにも支えられていない場合 (つまり、それが穴である場合)、true を返すような部分的な解決策があれば、私は完全に満足しています。

ヒントはありますか?

4

2 に答える 2

3

これは、オペレーティング システムと場合によってはファイル システムに依存します。2.6.28 以降の Linux は を実装しておりFIEMAP ioctl()、Solaris 上の ZFS は と を実装SEEK_HOLESEEK_DATAていlseek()ます。

于 2011-10-19T09:01:59.227 に答える
2

私の最初の考えは、「rsyncはどのようにそれを行うのですか?」でした。

rsyncは単にデータのゼロのブロックをチェックし、それらをスパースファイルとして書き込むことがわかりました。fileio.c厄介な詳細が必要な場合は、rsyncのソースコードを参照してください。

于 2011-10-19T08:43:25.967 に答える