如何在 Java 22 中使用 Foreign Function API 来调用 C 库 | Ife Sunmola

主要观点:介绍从 Java 调用 C 库(如 fopen、fgets 和 fclose)的方法,对比 JNI 说明 Foreign Function and Memory (FFM) API 的优势,包括更安全、无需写 C 代码等,详细展示了设置 LibC 类、fopen 等操作的代码及相关原理,还提及了 Arena 的作用及更多相关操作,最后讨论了与 JNI 的比较及相关工具 jextract 的使用。
关键信息

  • Java 22 前调用外函数常用 JNI,较易出错且需写 C 代码,FFM API 无需写 C 代码。
  • 在 LibC.java 中设置 Arena、Linker 等,通过一系列操作实现 fopen 等函数的调用。
  • Arena 类似分配器,用于管理内存分配和释放,使用时需注意与内存相关的操作。
  • 在 Runner.java 中通过 LibC 类调用 fopen 打开文件,再添加 fgets 和 fclose 实现文件读取和关闭。
  • 提到 jextract 工具可从头文件生成外函数绑定,文章未使用以更好地学习。
    重要细节
  • LibC 类的构造函数及相关方法,如 fopen 方法中对文件路径和模式的处理及内存分配。
  • fopen、fgets、fclose 的函数描述符及在 Java 中的调用方式。
  • 在主方法中对文件的操作流程,包括打开文件、读取内容和关闭文件。
  • 代码中的各种类型定义及异常处理。
  • 提供了相关参考资料和源代码的链接。
阅读 22
0 条评论