Похоже, что RandomAccessFile.writeLong () не минимизирует количество обращений к ОС.Стоимость резко увеличивается при использовании «rwd» вместо «rw», что должно быть достаточно, чтобы указать, что это не сами вызовы, которые стоят времени.(это факт, что операционная система пытается зафиксировать каждую запись на диск, а диск вращается так быстро)
{
RandomAccessFile raf = new RandomAccessFile("test.dat", "rwd");
int longCount = 10000;
long start = System.nanoTime();
for (long l = 0; l < longCount; l++)
raf.writeLong(l);
long time = System.nanoTime() - start;
System.out.printf("writeLong() took %,d us on average%n", time / longCount / 1000);
raf.close();
}
{
RandomAccessFile raf = new RandomAccessFile("test2.dat", "rwd");
int longCount = 10000;
long start = System.nanoTime();
byte[] aux = new byte[8];
for (long l = 0; l < longCount; l++) {
aux[0] = (byte) (l >>> 56);
aux[1] = (byte) (l >>> 48);
aux[2] = (byte) (l >>> 40);
aux[3] = (byte) (l >>> 32);
aux[4] = (byte) (l >>> 24);
aux[5] = (byte) (l >>> 16);
aux[6] = (byte) (l >>> 8);
aux[7] = (byte) l;
raf.write(aux);
}
long time = System.nanoTime() - start;
System.out.printf("write byte[8] took %,d us on average%n", time / longCount / 1000);
raf.close();
}
печатает
writeLong() took 2,321 us on average
write byte[8] took 576 us on average
Мне кажется, что у вас нетКэширование записи на диск.Без кэширования диска я бы ожидал, что каждая зафиксированная запись займет около 11 мс для диска 5400 об / мин, т.е. 60000 мс / 5400 => 11 мс.