【问题标题】:Reading shared memory data using Java that is written by C++使用 C++ 编写的 Java 读取共享内存数据
【发布时间】:2012-12-22 01:48:15
【问题描述】:

我有一个 C/C++ 应用程序,它在 Unix 的共享内存中写入数据。现在我想通过使用 Java 的程序读取共享内存数据。

程序应该读取共享内存数据。可以吗?

如果可能的话,需要一个小的实现。

【问题讨论】:

  • 仅通过 JNI 才能读取共享内存——在 Java 中你不能这样做。我对 JNI 的体验是,一些 JNI 插件使原本坚如磐石的 Java VM 崩溃。那么也许另一种解决方案是可能的?
  • 这个答案stackoverflow.com/a/1492536/1741542 谈论内存映射文件和 NIO FileChannel。也许这也适合你。
  • 如果您将从数据的持久性中受益(即使是出于调试目的),您可以考虑内存映射文件。这是一个使用纯 Java github.com/peter-lawrey/Java-Chronicle 的实现
  • @luukes 你确定使用Java程序我们不能读取c++程序写的共享内存数据吗?我们必须在两者之间使用 JNI 才能实现这一点?

标签: java c ipc shared-memory


【解决方案1】:

看看this codeproject 项目(适用于 Windows):

使用内存映射文件和 JNI 在 Java 和 C++ 之间进行通信 程序

或者,this 图书馆:

CLIPC 是一个开源 Java 库,它为开发人员提供 进程间通信 (IPC) 功能可能不存在或 难以在 Java 发行版中使用。

【讨论】:

  • 能否在 C++ 中创建一个仅用于读取共享内存的方法,然后使用 JNI 调用此方法?这会有效并且不会损害性能吗?
  • JNI 方法应该从 Java 而不是 C++ 调用。是的,您可以在 C++ 中创建一个方法来读取/写入共享内存。您也可以使用 JNI 方法在 Java 中做同样的事情。如果你做得对,就不用担心性能。
  • 能否请您告诉我如何实现以下功能的建议?
猜你喜欢
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2018-09-23
  • 1970-01-01
相关资源
最近更新 更多