是否有任何方法可以使用标准 Java 文件 API 访问分配给文件的 block 数?或者甚至使用一些不受支持且未记录的 API 来实现。任何可以避免 native 代码插件的事情。
我说的是 fstat/stat 系统调用在 Unix 中工作的 struct stat 的 st_blocks 字段。
我想要做的是创建一个文件的稀疏副本,该文件现在有大量冗余数据,即创建一个新副本,仅包含 Activity 数据但稀疏地写入其中。然后通过原子重命名/链接操作交换两个文件。但我需要一种方法来找出事先分配给文件的 block 数,它可能已经被稀疏地复制了。然后旧文件将被删除。
这将用于释放 100% Java 数据库应用程序中的磁盘空间。依赖文件系统中的稀疏文件支持的好处是,我不必更改指出数据所在位置的索引,这会增加手头任务的复杂性。
我认为我可以通过依赖文件时间戳来查看文件是否已被清理,从而做得很好。但这引起了我的兴趣。我什至在 java 7 NIO.2 API 中找不到任何用于此级别文件属性访问的内容。
最佳答案
我能想到的唯一方法是使用ls -s filename
来获取磁盘上文件的实际大小。 http://www.lrdev.com/lr/unix/sparsefile.html
关于java - 分配给稀疏文件的 block 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8094914/