将文件写入随机不连续的硬盘位置

Posted

技术标签:

【中文标题】将文件写入随机不连续的硬盘位置【英文标题】:Write files into randomly non-contiguous hard disk positions 【发布时间】:2013-07-05 16:57:08 【问题描述】:

我需要对我的程序做一些性能测试,并且我需要评估一些存储在文件中的数据的最差 IO 访问时间,所以我认为最好的评估方法是将这些数据随机存储到不同的 HD 扇区中为了避免连续的数据访问和缓存改进。我认为做到这一点的唯一方法是使用一些低级操作系统命令,例如 UNIX 中的 dd ,您可以在其中指定写入数据的扇区,但如果我没记错的话,这是一种不安全的方法。有人知道这样做的好方法吗?

PS:任何操作系统的任何解决方案都可以工作,唯一的要求是我必须对不同的数据大小进行测试,通过 JAVA 程序访问数据。

【问题讨论】:

【参考方案1】:

我认为这样做的唯一方法是使用一些低级操作系统命令

没有...RandomAccessFile has .seek():

final RandomAccessFile f = new RandomAccessFile(someFile, "rw");

f.seek(someRandomLong);
f.write(...);

现在,您当然要确保写入不会相互冲突。

另一种解决方案是将文件映射到内存中,并在写入之前将缓冲区的位置设置为某个随机位置。

【讨论】:

谢谢,我没有看“偏移量可能设置在文件末尾之外。设置偏移量超出文件末尾不会改变文件长度。”部分:P 我现在就试试! 好吧,只要你从那个偏移量开始和写入,文件长度就会改变;)在 Java 中创建稀疏文件可能的;)

以上是关于将文件写入随机不连续的硬盘位置的主要内容,如果未能解决你的问题,请参考以下文章

vhd怎么写入数据

为啥顺序写入比 HDD 上的随机写入快

从连续的物理内存写入硬盘

在excel文件中写入连续日期

RandomAccessFile--随机访问文件

如何将日期字符串添加到连续写入的日志文件的每一行