繁体   English   中英

C ++中的内存映射文件用Java读取

[英]Memory Mapped file in C++ read in Java

我有一个C ++程序,在某一点上使用

hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);

lpName类似于"myfile"没有扩展名或路径,即内存映射文件。 我可以在路径Sessions\\1\\BaseNamedObjects\\myfile找到WinObj -BrowserWinObj )的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的Memorymap ),但是我想保持简单并使用nio (如果可能的话)。

UPDATE

所以我只是尝试了C#中的所有内容,它非常容易,并没有带我超过5行代码。

文件是一个文件,我同意“Joachim Pileborg”,Java程序没有在其工作目录中获取该文件。 尝试

String working dir = System.getProperty("user.dir");

并确保文件位于正确的路径中。

您需要使用CreateFileMapping而不是OpenFileMapping 这样,您将在磁盘上创建与文件映射关联的实际文件。

注意:请务必注意,使用常规读/写方法不会与不同进程的文件映射同步。 所以你仍然需要在Java中使用类似MappedByteBuffer的东西

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM