我有一个 Java 程序,旨在以自定义文件格式显示图像,使用JNI通过 C++ 库读取。数据在 C++ 端加载到 char 数组中,并在 Java 端传输到 BufferedImage。由于图像的某些部分可以从内存中删除并且需要定期重新加载,所以我希望这些操作尽可能快。
我目前这样做的方式是将数据从文件中读取到 C++ 库内存中的缓冲区中。为了填充 BufferedImage,Java 代码为每个像素调用 JNI 函数以从该缓冲区中读取数据,并在必要时将另一块数据加载到缓冲区中。这可行,但开销比我想要的要高。
为了改进这一点,我一直计划做的是使用 JNI 调用将 BufferedImage 对象传递给 C++ 代码,并从那一侧对其进行函数调用。我一直在尽可能多地研究 JNI,但我无法确定从 JVM 加载的 C++ 库中修改 Java 对象是否有任何成本。这是实现这一点的好方法,还是有更快的方法来使用 JNI 传输大量字节数据?