如何格式化以下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>>)
答案 0 :(得分:1)
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)
价:
答案 1 :(得分:0)
我没有对此进行过测试,但如果你编码{atom, "message"}
,你不应该发送一个元组,而不是一个接一个地发送2个对象吗?尝试创建Tuple对象并添加atom
和message
作为元素。