如何从C中实现的JNI(本机)方法输出回Java

时间:2015-04-16 21:00:16

标签: java c java-native-interface

我在C中有一个第三方原生子程序,希望将结果输出到文件描述符。我可以通过将文件描述符传递给C子例程来选择文件描述符(包括标准输出,stdout,如果我需要),但我不能将它输出到文件描述符以外的任何内容。我创建了自己的C代码,作为Java和这个C子例程之间的接口。

如何直接将C子程序的输出返回给Java ...也就是说,不将其写入文件然后再读回来?

输出通常在20-30k附近并且是普通的人类可读文本,因此它不是非常大并且对我的用户有意义。我想在输出时在Java控制台(如窗口)中向用户显示输出。这可能吗?怎么样?

我看到Java有一个FileDescriptor对象......这是解决方案的一部分吗?我不想将我的C fd插入FileDescriptor对象(使用FileDescriptor的私有字段),如下所述:http://www.kfu.com/~nsayer/Java/jni-filedesc.html

我想使用Java最佳实践和惯用语来做到这一点。

1 个答案:

答案 0 :(得分:1)

如果您使用的是类Unix系统,请考虑创建一个命名管道,然后在本机和Java代码中打开它,就像它是普通文件一样。

这与使用临时文件类似,不同之处在于数据直接从编写器传输到读取器而不存储在磁盘上。

缺点是您仍然需要管理临时命名管道。