2013-03-03 2 views
0

Как отформатировать следующий Erlang термин:jInterface создать внешний Erlang срок

{ atom, "message" } 

В jInterface на внешний формат, который я могу позвонить в Erlang оболочки

erlang:binary_to_term(Binary) 

Пример: Обратите внимание: поскольку кортеж будет отправлен по сети, я заканчиваю конвертированием в байт [].

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 

Двоичный получен Эрланга является:

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

Затем в Эрланга оболочке преобразования принятого в двоичный термин дает 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

извините, но я действительно не могу понять вашу проблему и то, что вы здесь задаете. Не могли бы вы уточнить? – user601836

+0

Почему мой java-код jInterface не создает полный термин BERT? – BAR

+0

Почему двоичное представление? вы работаете с сокетами или с узлом java, подключенным к erlang? – user601836

ответ

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"} 

кажется, что сообщение отсутствует 131 тег требуемого term_to_binary. Как видно из вывода Java, этот тег не добавляется кодировкой jinterface. Если я просто добавлю 131 в начало двоичного файла, он правильно декодирует.

Теперь почему Java не добавляет его?

Я по-прежнему принимать ответы, как я официально не ответил на мой вопрос

Ref (в поддерживаемом образом, то есть не взлом с 131.):

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

0

Я не проверял это , но если вы кодируете {atom, "message"}, разве вы не должны отправлять по кортежу, а не по 2 объекта один за другим? Попробуйте создать объект Tuple и добавьте atom и message в качестве элементов.

 Смежные вопросы

  • Нет связанных вопросов^_^