Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有两个选择——我可以使用 JNI 或使用 Runtime.exec 来执行 C++ 库。
C++ 程序是 CPU 密集型和长时间运行的,即某些调用可能需要几个小时才能返回。
各自的优缺点是什么?我应该采用哪种方法?
如果您需要与 C++ 库交互,请选择 JNI。
如果它是您只想调用的独立程序(也许还想获取输出),那就Runtime.exec()简单多了。
Runtime.exec()
您是否将JNA视为第三种选择?
从 JNA 网站:
JNA 使 Java 程序可以轻松访问本机共享库(Windows 上的 DLL),而无需编写 Java 代码以外的任何内容——不需要 JNI 或本机代码。此功能可与 Windows 的 Platform/Invoke 和 Python 的 ctypes 相媲美。访问在运行时是动态的,无需代码生成。
有关介绍,请参阅他们的入门指南。
使用 JNI 可能会限制您从 32 位迁移到 64 位的能力。您可能还会发现您还必须调整应用程序内存设置。
除非你知道 C++ 的东西写得有多好 - 它可能会使你的应用程序更加不稳定。您很幸运,因为 C++ 位需要几个小时 - 所以只需在外部调用它。