我正在运行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();
}
}
[如果有人这样做并且可以帮助我,我将非常感谢您提供一些指导。预先感谢!
请说明您的代码出了什么问题(预期结果和实际结果是什么。
一点建议:
OtpErlangString
实际上映射到Erlang / Elixir中的charlist,所以这可能不是您想要的,因为charlist不支持unicode。请改用OtpErlangBinary
,并且不要忘记使用javaString.getBytes(StandardCharsets.UTF_8)
将所有Java字符串映射到字节数组中,否则您将无法在Erlang / Elixir中获得UTF-8编码的二进制文件,因为Java在内部对UTF-16LE中的每个字符串进行了编码(由于需要与Windows的固定字节unicode编码兼容)。