1

次の erlang 用語をフォーマットするにはどうすればよいですか。

{ atom, "message" }

erlangシェルで呼び出すことができる外部フォーマットへのjInterface

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 シェルで、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>>)
4

2 に答える 2

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 でハッキングしない)

参照:

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

于 2013-03-03T19:47:24.563 に答える
0

私はこれをテストしていませんが、 をエンコードしている場合{atom, "message"}、2 つのオブジェクトを次々に送信するのではなく、タプルを送信するべきではありませんか? Tupleオブジェクトを作成し、要素としてatomandを追加してみてください。message

于 2013-03-07T02:33:58.770 に答える