[英]Memory Mapped file in C++ read in Java
我有一個C ++程序,在某一點上使用
hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);
lpName
類似於"myfile"
沒有擴展名或路徑,即內存映射文件。 我可以在路徑Sessions\\1\\BaseNamedObjects\\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());
但我總是得到同樣的錯誤: 無法在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.