Версия FileChannel для Java в памяти - PullRequest
3 голосов
/ 16 декабря 2009

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 16 декабря 2009

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

1 голос
/ 16 декабря 2009

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

...