Я в процессе внесения некоторых изменений в библиотеку, которую я использую. Чтобы уменьшить использование памяти, библиотека записывает свои временные данные на диск, а не сохраняет их в памяти. Однако для моего сценария использования более эффективно хранить его в памяти. Он также имеет некоторые проблемы с параллелизмом, поскольку он имеет постоянные имена для своих временных файлов и поэтому не может одновременно запускаться в разных потоках (поскольку потоки повреждают данные друг друга).In-memory версия FileChannel Java
Поэтому мне необходимо изменить библиотеку, чтобы она сохраняла все свои данные в памяти. Я изначально не писал библиотеку, и поэтому мне не очень удобно делать радикальные изменения в коде. Поэтому я хотел бы сделать это с минимальным рефакторингом. Код, который записывает на диск, довольно прост. Вот (несколько упрощенный) пример:
final FileChannel fileChannel = this.randomAccessFile.getChannel();
fileChannel.position(calculatePosition());
while (blockData.hasRemaining())
{
fileChannel.write(blockData);
}
Считывание блока очень похож (т.е. он использует FileChannel, который он получает от RandomAccessFile).
Похоже, что самое легкое решение было бы, если бы я мог использовать некоторую реализацию FileChannel, которая сопоставляется с местом в памяти, а не файлом. Я знаю, что могу сопоставить файл в месте в памяти с помощью Map-метода FileChannel. Однако это наоборот. Это дает мне «память-API» для файла. Мне нужен интерфейс FileChannel для некоторой памяти. Существуют ли какие-либо доступные варианты этого?