Вопрос

Я в процессе внесения некоторых изменений в библиотеку, которую я использую. Чтобы уменьшить использование памяти, библиотека записывает свои временные данные на диск вместо того, чтобы держать ее в памяти. Однако для моего сценария использования более эффективно держать его в памяти. У него также есть некоторые проблемы с параллелизмом, потому что он имеет постоянные имена для своих пусков и, следовательно, не может работать одновременно в разных потоках (потому что потоки будут испортить данные друг друга).

Поэтому мне нужно изменить библиотеку, чтобы вместо этого она хранила все данные в памяти. Я изначально не написал библиотеку, и поэтому мне не очень удобно вносить резкие изменения в код. Поэтому я хотел бы сделать это с максимально небольшим рефакторией. Код, который пишет на диск, довольно прост. Вот (несколько упрощенный) пример:

final FileChannel fileChannel = this.randomAccessFile.getChannel();
fileChannel.position(calculatePosition());
while (blockData.hasRemaining())
{
 fileChannel.write(blockData);
}

Чтение блока очень похоже (т.е. он использует FileChannel, который он получает от Randomaccessfile).

Такое ощущение, что самое простое решение было бы, если я смогу использовать какую -то реализацию FileChannel, которая отображает место в памяти, а не в файл. Я знаю, что могу отобразить файл в место в памяти, используя Mothod Map FileChannel. Однако это наоборот. Это дает мне «память-API» в файл. Я хочу, чтобы FileChannel-Interface против некоторой памяти. Есть ли доступные реализации этого?

Это было полезно?

Решение

Java 7 разрешает платных файловых систем, поэтому вы сможете использовать файловую систему на основе памяти и сохранить текущий API FileChannel. Помимо этого, вам, вероятно, придется изменить API, который вы используете для Commons-VFS, как предлагает Адриан или использовать только структуры памяти.

Другие советы

Может быть, вы можете использовать файловую систему в памяти, например, как Apache Commons VFS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top