1

我正在运行 elixir/otp 应用程序。它需要使用一些 Java 代码,所以我使用 JInterface 来实现类似 RPC 的通信。

我现在可以进行这种通信。我可以从 elixir 向 Java 发送一条消息,并在概念上发回一些数据。

我需要发回一个字符串数组。

这似乎是一项简单的任务,但我正在努力寻找合适的文档来执行此操作。我能找到的唯一信息只有真正让我发回二进制字符串。

这是我的 JInterface 代码的重要部分:

    private static void setupMBox() {
    try {
        OtpNode myOtpNode = new OtpNode("server");
        OtpMbox myOtpMbox = myOtpNode.createMbox("ltext");
        myOtpNode.setCookie("cookiepassword");

        while (true) {
            OtpErlangTuple tuple = (OtpErlangTuple) myOtpMbox.receive();
            OtpErlangPid lastPid = (OtpErlangPid) tuple.elementAt(0);
            OtpErlangAtom dispatch = (OtpErlangAtom) tuple.elementAt(1);

            if (dispatch.toString().equals("split_paragraph")) {
                List<String> sentences = paragraphSplitter.splitParagraphIntoSentences(TEST_PARAGRAPH, Locale.JAPAN);
                List<OtpErlangString> erlangStrings = new ArrayList<OtpErlangString>();

                for (String sentence : sentences) {
                    erlangStrings.add(new OtpErlangString(sentence));
                }
                // this will not work
                OtpErlangList erlangList = new OtpErlangList((OtpErlangObject[]) erlangStrings.toArray());

                myOtpMbox.send(lastPid, erlangList);
                System.out.println(erlangList);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

如果有人这样做并且可以帮助我,我将非常感谢一些指导。提前致谢!

4

1 回答 1

1

请说明您的代码有什么问题(预期结果是什么,实际结果是什么)。

一个小建议:

OtpErlangString实际上映射到 Erlang/Elixir 中的 charlist,所以这可能不是你想要的,因为 charlist 不支持 unicode。改为使用OtpErlangBinary,并且不要忘记使用 将所有 java 字符串映射到字节数组中javaString.getBytes(StandardCharsets.UTF_8),否则您将无法在 Erlang/Elixir 中获得 UTF-8 编码的二进制文件,因为 java 在内部将每个字符串编码为 UTF-16LE(由于需要与 Windows 的固定字节 unicode 编码兼容)。

于 2019-12-23T10:37:35.890 回答