Я пытаюсь использовать java для записи инструмента управления данными. Мне нужно использовать эффективный случайный файл для чтения и записи. Я пытаюсь использовать рекомендованное сопоставление файлов друзей. Но эффект не кажется хорошим. Я использую RandomAccessFile для чтения и записи файлов со скоростью, которая в 10 раз быстрее, чем MappedByteBuffer.JAVA MappedByteBuffer, где высокая эффективность?
File file = new File("D:\\testdb");
if (!file.exists()) {
file.createNewFile();
}
RandomAccessFile accessFile = new RandomAccessFile(file, "rw");
accessFile.setLength(65536);
FileChannel fileChannel = accessFile.getChannel();
Random random = new Random(0);
{
long time = System.nanoTime();
for (int i = 0; i < 1024; i++) {
byte[] data = new byte[4096];
accessFile.seek(4096);
accessFile.read(data, 0, 4096);
accessFile.seek(4096);
accessFile.write(data);
}
System.out.println(System.nanoTime() - time);
Thread.sleep(1000);
}
{
long time = System.nanoTime();
for (int i = 0; i < 1024; i++) {
MappedByteBuffer buffer = fileChannel.map(MapMode.READ_WRITE, 12288, 4096);
buffer.force();
}
System.out.println(System.nanoTime() - time);
}
Я хотел бы знать, где преимущества MappedByteBuffer?
Я добавил данные для чтения и записи. Проводимое время еще более очевидно.
{
long time = System.nanoTime();
for (int i = 0; i < 1024; i++) {
byte[] data = new byte[4096];
accessFile.seek(4096);
accessFile.read(data, 0, 4096);
for (int j = 0; j < data.length; j++) {
data[j] = data[data.length - j - 1];
}
accessFile.seek(4096);
accessFile.write(data);
}
System.out.println(System.nanoTime() - time);
}
{
long time = System.nanoTime();
for (int i = 0; i < 1024; i++) {
MappedByteBuffer buffer = fileChannel.map(MapMode.READ_WRITE, 12288, 4096);
for (int j = 0; j < buffer.capacity(); j++) {
buffer.put(j, buffer.get(buffer.capacity() - j - 1));
}
buffer.force();
}
System.out.println(System.nanoTime() - time);
}
Output:
39655738
11786737561
Я пытаюсь выполнить управление данными, вот кэш. Загружен в память данных не нужно заботиться. Поскольку данные должны быть прочитаны или записаны. Должен быть синхронизирован с файлом после завершения. Если эти данные не изменены. Не требуется синхронизация. Это позволит сэкономить время. Преимущество RandomAccessFile будет более очевидным
Вы можете использовать JMH для микро-бенчмаркинга. – Jayan