2

標準のJavaファイルAPIを使用してファイルに割り当てられたブロック数にアクセスする方法はありますか?または、サポートされていない、文書化されていないAPIアンダーニートでそれを行うこともできます。ネイティブコードプラグインを避けるためのもの。

私は、fstat / statsyscallsがUnixで機能するstructstatのst_blocksフィールドについて話しています。

私がやりたいのは、冗長データがたくさんあるファイルのスパースコピーを作成することです。つまり、アクティブデータのみを含み、スパースに書き込まれるファイルの新しいコピーを作成します。次に、2つのファイルをアトミックな名前変更/リンク操作で交換します。ただし、ファイルに割り当てられているブロックの数を事前に確認する方法が必要です。ファイルはすでにまばらにコピーされている可能性があります。その後、古いファイルが削除されます。

これは、100%Javaであるデータベースアプリケーションのディスク領域を解放するために使用されます。ファイルシステムでスパースファイルのサポートに依存することの利点は、データの場所を示すインデックスを変更する必要がないことです。これにより、手元のタスクが複雑になります。

ファイルのタイムスタンプを使用して、ファイルが既にクリーンアップされているかどうかを確認することで、ある程度うまくいくと思います。しかし、これは私に興味をそそられました。このレベルのファイル属性アクセス用のjava7NIO.2APIには何も見つかりません。

4

1 に答える 1

3

私が考えることができる唯一の方法はls -s filename、ディスク上のファイルの実際のサイズを取得するために使用することです。 http://www.lrdev.com/lr/unix/sparsefile.html

于 2011-11-11T14:03:15.347 に答える