【问题标题】:How to transmit data from Nodejs program to Java program?如何将数据从 Nodejs 程序传输到 Java 程序?
【发布时间】:2021-08-20 02:34:29
【问题描述】:

Java 类内部如下:

Process process = Runtime.getRuntime().exec("node /home/master/code/nodejs/searchLi.js");
process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
while ( (line = reader.readLine()) != null) {
    builder.append(line);
    builder.append(System.getProperty("line.separator"));
}
String result = builder.toString();
System.out.println(result);

nodejs里面的searchLi如下:

const Stream = require('stream');
const readableStream = new Stream.Readable();
readableStream.push('ping!');
readableStream.push('pong!');
console.log("success");
return "success";

如您所见,我尝试实现流但失败了。如何将nodejs文件中的String传输到Java文件中?

【问题讨论】:

    标签: java node.js stream pipe


    【解决方案1】:

    您的 Java 代码很好,但您的 node.js 代码没有正确使用流。要么停止使用你自己的流,而是使用process.stdout.write,或者修复你的流指向那里,如下所示:

    const Stream = require('stream');
    const readableStream = new Stream.Readable();
    readableStream.push('ping!');
    readableStream.push('pong!');
    readableStream.push(null);
    readableStream.pipe(process.stdout);
    console.log("success");
    return "success";
    

    【讨论】:

    • 这正是我想要的!谢谢!
    【解决方案2】:

    您可以设置一个 http 服务器,尽管对于这么小的东西(一个字符串),我建议使用 fs npm 库来创建一个文件并让 java 程序从中读取。

    我没有java经验,但我假设有一个文件读取库。

    【讨论】:

    • 感谢您的回答!我只是想知道是否可以像使用相同语言的 2 个文件一样直接使用返回值?在您看来,直播是一个可行的选择吗?
    • 生成一个 HTTP 服务器只是为了在父进程和子进程之间进行通信,坦率地说,这是我听过的最复杂的解决方案之一。
    • @JosephSible-ReinstateMonica 我不精通这类东西,我不建议将其作为解决方案。
    • @propre_poli 流绝对是您应该使用的,另一个答案为您提供了一个很好的解决方案。我查看了流,它似乎使用了我的文件解决方案的流,但对其进行了优化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2012-05-06
    • 1970-01-01
    • 2013-03-09
    • 2013-09-26
    • 2013-08-14
    • 2018-01-21
    相关资源
    最近更新 更多