根据API,这些是事实:
- 该
seek(long bytePosition)
方法简单地说,将指针移动到bytePosition
参数指定的位置。 - 当
bytePosition
大于文件长度时,除非在(新)端写入一个字节,否则文件长度不会改变。 - 如果跳过的长度中存在数据,则此类数据保持不变。
但是,我很好奇的情况是:当有一个没有数据的文件(0字节)并且我执行以下代码时:
file.seek(100000-1);
file.write(0);
0
所有 100,000 字节几乎立即被填满。我可以在 10 毫秒内时钟超过 200GB。
但是,当我尝试使用其他方法(例如BufferedOutputStream
相同的过程)写入 100000 个字节时,几乎需要无限长的时间。
造成这种时间差异的原因是什么?有没有更有效的方法来创建一个n
字节文件并用 s 填充它0
?
编辑: 如果数据没有实际写入,文件是如何填充数据的?示例此代码:
RandomAccessFile out=new RandomAccessFile("D:/out","rw");
out.seek(100000-1);
out.write(0);
out.close();
这是输出:
另外,如果文件足够大,由于空间不足,我无法再写入磁盘。