java - jInterface 创建外部 Erlang 术语

标签 java erlang jinterface

如何格式化以下 erlang 术语:

{ atom, "message" }

在 jInterface 中,我可以在 erlang shell 中调用外部格式

erlang:binary_to_term( Binary )

示例: 请注意,由于元组将通过网络发送,因此我通过转换为 byte[] 来完成。

OtpErlangObject[] msg = new OtpErlangObject[2];
msg[0] = new OtpErlangAtom( "atom" );
msg[1] = new OtpErlangString( "message" );

OtpErlangTuple reply = new OtpErlangTuple(msg);

OtpOutputStream stream = new OtpOutputStream(reply);

stream.toByteArray()    // byte[] which I send over net

Erlang 接收到的二进制文件是:

B = <<104,2,100,0,4,97,116,111,109,107,0,7,109,101,115,115,97,103,101>>

然后在 erlang shell 中将接收到的术语转换为二进制会给出 badarg。

 binary_to_term( B ).                                                     
** exception error: bad argument
     in function  binary_to_term/1
        called as binary_to_term(<<104,2,107,0,4,97,116,111,109,107,0,7,109,
                                   101,115,115,97,103,101>>)

最佳答案

binary_to_term( <<131,104,2,107,0,4,97,116,111,109,107,0,7,109,101,115,115,97,103,101>> ).
{"atom","message"}

该消息似乎缺少 term_to_binary 所需的 131 标记。从 Java 输出中可以明显看出,该标签不是由 jinterface 编码添加的。如果我只是将 131 添加到二进制文件的开头,它就会正确解码。

现在为什么 Java 不添加它?

我仍然会接受答案,因为我还没有正式回答我的问题(以受支持的方式,即不使用 131 进行黑客攻击)

引用:

http://www.erlang.org/doc/apps/erts/erl_ext_dist.html

关于java - jInterface 创建外部 Erlang 术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15189447/

相关文章:

java - 无法在 VisualVM 中打开某些应用程序

erlang - 是否有必要为 wxErlang 小部件发明 ID?

erlang - Java 到 Erlang 消息

erlang - 在 Erlang 中执行计算密集型任务而不牺牲可扩展性的最佳方法是什么?

java - MappingException .hibernate 映射对于不同包中的类失败

java - 从容器获取线程?

java - 使用 axis2 和 apache 的网络服务连接

syntax - 从程序员的角度来看,Erlang 是一种简洁的语言吗?

search - 二郎邻居搜索

java - 如何与一个 Erlang 节点中的特定进程进行通信?