簡體   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