У меня есть программа C ++, которая использует в один момент
hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);
lpName
это что-то вроде "myfile"
без расширений или пути, то есть файл с отображенной памятью. Я могу найти файл с WinObj-Браузер (WinObj) в пути Sessions\1\BaseNamedObjects\myfile
, Если я пытаюсь прочитать этот конкретный файл в Java, я попытался
File file = new File("myfile");
FileChannel filechannel = new RandomAccessFile(file, "r").getChannel();
MappedByteBuffer buffer = filechannel.map(FileChannel.MapMode.READ_ONLY, 0, filechannel.size());
Но я всегда получаю одну и ту же ошибку: Не удается найти указанный файл на RandomAccessFile
команда. Может быть, нужен другой доступ к файлу? Который из?
Как я понимаю из других сообщений, они всегда используют путь и расширение, однако я не знаю, что путь и расширение будут в моем случае …
То, что я ищу, я способ доступа к Пространства имен объектов ядраПространства имен объектов ядра
Я знаю, есть этот пример JNI (Карта памяти с использованием JNI), однако я хотел бы сохранить его простым и использовать nio
(если вообще возможно).
ОБНОВИТЬ
Так что я просто попробовал все это на C #, и это было до смешного просто, не заняло у меня больше 5 строк кода.
Файл — это файл, я согласен с «Joachim Pileborg», что программа на Java не получила файл в своем рабочем каталоге. Пытаться
String working dir = System.getProperty("user.dir");
и убедитесь, что файл находится в правильном пути.
Вам нужно использовать CreateFileMapping
вместо OpenFileMapping
, Таким образом, вы создадите фактический файл на диске, который связан с сопоставлением файлов.
Примечание. Важно отметить, что использование обычных методов чтения / записи НЕ будет синхронизировано с сопоставлением файлов другого процесса. Так что вам все еще нужно использовать что-то вроде MappedByteBuffer в Java