java怎么引用c

java怎么引用c,第1张

Java调用C语言程序时,主要是涉及到 *** 作系统底层的事件。这种时间Java无法处理,例如用户上传一个视频文件,需要后台给视频加上水印,或者后台分离视频流和音频流。只能通过调用C语言处理。枯纯茄

使用Java如何去调用没察C语言的接口呢?使用Java的JNI技术。

具体调用步骤如下:

1.首先创建Java文件 HelloJni.java ,并创建native方法。

2.编译Java文件并生成java头文件。

3.创建C语言文件,HelloWorld.c。

4.生成动态链接库文件 libhello.so。

5.设置动态链接裤如库文件的目录。

6.把刚才生成的so文件拷贝到/home/lib下,然后执行class文件。

用 Runtime 的 exec 方法的确是可行的。

假设我们已经把以下的慧喊 C 程序编绎成 adder.exe:

#include <stdio.h>

int main() {/* 简单地循环打印标准输入上的两个整数之和 */

int a, b, lineNumber = 0

while (scanf("%d %d", &a, &b))

printf("Line# %d \t %d + %d == %d\n", ++lineNumber, a, b, a + b)

return 0

}

以下的 Java 程序可以在启动 adder.exe 后,跟 adder.exe 的标准输入和输出接轨,然后持续不断地向它发送数据和索取结果:

import java.io.*

class C {

public static void main(String[] args) throws Exception {

final Process proc = Runtime.getRuntime().exec("adder.exe")

// 用另一个线程把参数送到早伍 proc 的标准输入上去。

new Thread() {

public void run() {

OutputStream stdin = proc.getOutputStream()

for (int i = 0i++) {

try {

Thread.sleep(1) // 要休息片刻才看得到 I/O 的缓陆碧或存效果。

stdin.write((i + " " + i + "\n").getBytes())

} catch (Exception ex) {

ex.printStackTrace()

}

}

}

}.start()

// 主线程负责读取并打印 proc 的标准输出。

BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()))

for (String linenull != (line = stdout.readLine()))

System.out.println(line)

}

}

循环里的 Thread.sleep(1) 纯粹是为了凸显 I/O 的缓存效果。

我测试时看到大约 900 行的缓存量(用 32-bit XP 和 Java 1.6)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12310617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存