Elixir / JInterface - 从 Java 将字符串列表发送回 elixir
Posted
技术标签:
【中文标题】Elixir / JInterface - 从 Java 将字符串列表发送回 elixir【英文标题】:Elixir / JInterface - Sending a list of strings back to elixir from Java 【发布时间】:2020-04-13 21:18:32 【问题描述】:我正在运行 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();
如果有人这样做并且可以帮助我,我将非常感谢一些指导。提前致谢!
【问题讨论】:
【参考方案1】:请说明您的代码有什么问题(预期结果是什么,实际结果是什么)。
一点建议:
OtpErlangString
实际上映射到 Erlang/Elixir 中的 charlist,所以这可能不是你想要的,因为 charlist 不支持 unicode。请改用OtpErlangBinary
,不要忘记使用javaString.getBytes(StandardCharsets.UTF_8)
将所有java 字符串映射到字节数组中,否则您将无法在Erlang/Elixir 中获得UTF-8 编码的二进制文件,因为java 在内部对UTF-16LE 中的每个字符串进行编码(由于需要兼容Windows的固定字节unicode编码)。
【讨论】:
好的,所以我在发布后不久就开始工作了。从那时起已经进行了许多更改,并且不记得具体是什么问题 - 但是,您给了我一些有趣的事情来检查我不知道的事情,我需要测试这个解决方案是否适用于所有情况。特别是,我不知道“UTF-16LE”。我的应用程序用于学习和纠正外语文本 - 所以这些东西非常重要。谢谢你的智慧:)以上是关于Elixir / JInterface - 从 Java 将字符串列表发送回 elixir的主要内容,如果未能解决你的问题,请参考以下文章
将来自 JInterface Java 应用程序的二进制响应转换回 Elixir 中的字符串列表