записать файл в память с java.nio? - PullRequest
6 голосов
/ 22 марта 2012

С помощью nio можно отобразить существующий файл в памяти.Но возможно ли создать его только в памяти без файла на жестком диске?

Я хочу имитировать функции окон CreateFileMapping, которые позволяют записывать в память.

Существует ли эквивалентная системав Java?

Цель состоит в том, чтобы записать в память, чтобы другая программа (c) могла ее прочитать.

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Посмотрите на следующее.Файл создан, но он может быть настолько близок к вашему.

MappedByteBuffer
MappedByteBuffer.load()
FileChannel
FileChannel.map()

Вот фрагмент кода, который поможет вам начать работу.

    filePipe = new File(tempDirectory, namedPipe.getName() + ".pipe");
    try {
        int pipeSize = 4096;
        randomAccessFile = new RandomAccessFile(filePipe, "rw");
        fileChannel = randomAccessFile.getChannel();
        mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, pipeSize);
        mappedByteBuffer.load();
    } catch (Exception e) {
    ...
0 голосов
/ 23 марта 2012

Большинство библиотек в Java имеют дело с входными и выходными потоками в отличие от java.io.File объектов.
Примеры: imageчтение , XML , аудио , zip

По возможности при работе с вводом / выводом используйте потоки.

Однако это может быть не то, что вам нужно, если вам нужен произвольный доступ к данным.

При использовании файлов с отображенной памятью вы получаете MappedByteBuffer из FileChannel с использованием FileChannel.map () , если вам не нужен файл, просто используйте вместо него ByteBuffer , который полностью существует в памяти.Создайте один из них, используя ByteBuffer.allocate () или ByteBuffer.allocateDirect () .

0 голосов
/ 23 марта 2012

Файл существует на диске по определению.Ваш вопрос заключает в себе противоречие в терминах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...