如何在java中访问c ++内存映射文件

时间:2010-11-01 18:50:09

标签: java c++ interop memory-mapped-files

我有一个Windows c ++应用程序,它为经常更新的位图创建一个内存映射文件。我想访问此内存映射文件以在Java应用程序中显示实时图像。我怎么能这样做?

我知道FileChannel可以映射到内存但我看不到如何访问由另一个进程创建的内存映射文件。

我已经在我的java应用程序中使用JNA,我应该用它来访问标准的Windows内存映射文件功能吗?

或者您是否有其他解决方案而不是内存映射文件,以便从单独程序创建的图像中显示java中的实时图像流?

3 个答案:

答案 0 :(得分:2)

有一个代码示例here可以使用JNI从C ++(Win32内存映射文件)桥接到Java。可能只是按原样工作,但根据您的情况,可能需要对安全性和线程进行一些清理。

答案 1 :(得分:1)

我最终使用了jna和他们提供的平台库。 Kernel32包提供对 CreateFileMapping MapViewOfFile 函数的访问。

答案 2 :(得分:0)

内存映射文件仍然是文件。您可以使用java.io读取它,或者如果您希望在Java中使用内存映射,则可以使用java.nio中的MappedByteBuffer。