Версия файла в памяти Java-канала


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

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

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

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

Он чувствует например, самое простое решение было бы, если бы я мог использовать некоторую реализацию FileChannel, которая сопоставляется с местом в памяти, а не с файлом. Я знаю, что могу сопоставить файл с местом в памяти, используя картографический метод FileChannel. Тем не менее, это другой путь вокруг. Это дает мне "memory-API" для файла. Мне нужен файловый канал-интерфейс против некоторой памяти. Существуют ли какие-либо доступные реализации этого?

2 3

2 ответа:

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

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