背景
我的应用程序现在已达到瓶颈,其中最慢的部分是所有数据都必须通过的 AES 加密和解密流。为了克服这个问题,我计划通过 JNI 和 OpenSSL 在 native 代码中实现这种加密,这样我就可以利用 AES-NI 和直接内存访问之类的东西(我的缓冲区已经是直接的,所以我已经可以获得指向它们的指针内存区域)
问题
每次我需要加密或解密某些数据时,用 key 重新创建 OpenSSL 密码是没有意义的。如果我使用 Java,我会简单地将密码实例存储为类中的一个字段,但是由于密码是一个 C“对象”,我不能这样做。
问题
如何将 C“对象”绑定(bind)到 Java 类实例,以便后续调用可以使用存储的“对象”。我想这与将“对象”指针作为 long 存储到 Java 类中,然后取消引用它有关,但是我不太确定这是否完全跨平台。
答案
必须是:
- 简单
- 快
- 跨平台
感谢您的宝贵时间!
最佳答案
你可以在Java Object中创建一个变量private int mNativeObj
,以及一个保存native指针的方法,比如public void setNativeObject(int pointer)
。在 C 代码中,调用 CallVoidMethod()
来保存指向 Java Object 的指针。可以引用Oracle's doc .
关于java - 如何将 C 变量 (JNI) 存储到 Java 类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18375874/