rst*_*rst 18 c++ java winapi nio memory-mapped-files
我有一个C++程序,在某一点上使用
hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);
Run Code Online (Sandbox Code Playgroud)
的lpName
是一样的东西"myfile"
不带扩展名或路径,即内存映射文件.我可以在路径中找到WinObj -Browser(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());
Run Code Online (Sandbox Code Playgroud)
但我总是得到同样的错误:无法在RandomAccessFile
命令中找到指定的文件.也许需要另一个文件访问?哪一个?
据我所知,其他帖子,他们总是使用路径和扩展名,但是,我不知道路径和扩展名在我的情况下......
我在寻找什么,我是一种访问内核对象命名空间内核对象命名空间的方法
我知道,有这个JNI示例(使用JNI的Memorymap),但我想保持简单和使用nio
(如果可能的话).
UPDATE
所以我只是尝试了C#中的所有内容,它非常简单,没有带我超过5行代码.
您需要使用CreateFileMapping
而不是OpenFileMapping
. 这样,您将在磁盘上创建与文件映射关联的实际文件。
注意:请务必注意,使用常规读/写方法不会与不同进程的文件映射同步。所以你仍然需要在Java中使用类似MappedByteBuffer的东西