2013-12-18 2 views
0
  A= term_to_binary({100,200,123,45}) , 
      io:format("~p~n",[A]), 
      mongo:save(?IP_ADDRESS, {'_id', 1, ip,A}). 

результат < < 131,104,4,97,100,97,200,97,123,97,45 >>Как читать Erlang кортежа, сохраненный в MongoDB с Явой

и мне нужно прочитать его в Java

DBObject a = IpTable.findOne(new BasicDBObject("_id",1)); 
    byte[] t=null; 
    try 
    { 
     String u = a.get("ip").toString(); 
     System.out.println(u); 
      t= u.getBytes("ISO8859-1"); 
    } 
    catch(Exception ex) 
    { 

    } 
    for(int i=0;i<t.length;i++) 
    System.out.print(t[i]+","); 
    System.out.println(); 

результат

63,104,4,97,100,98,0,0,7,63,97,123,97,45,

, если я меняю первые байты в 131

t[0]=(byte)131; 
    try 
    { 
     OtpInputStream ois = null; 
     ois = new OtpInputStream(t); 
     OtpErlangTuple IP = (OtpErlangTuple)OtpErlangObject.decode(ois); 
     System.out.println(IP);} 

результат {100,63,123,45} неправильно

+0

его вероятно проблема с кодировкой, когда вы 'toString()' объект или 'getBytes()' данные. Ознакомьтесь с http://stackoverflow.com/questions/16909645/how-to-read-erlang-term-from-redis-by-using-java-client/19369461#19369461 – Daniel

ответ

0

Указав term_to_binary, вы пытаетесь преобразовать Erlang термин в двоичную. То же самое нужно преобразовать с помощью binary_to_term, чтобы вернуть результат. Хранение информации о предмете в mongodb, и вы пытаетесь сделать другое преобразование здесь.

Следовательно, вы результатом является неправильным

1> A= term_to_binary({100,200,123,45}). 
<<131,104,4,97,100,97,200,97,123,97,45>> 
2> binary_to_term(A). 
{100,200,123,45} 

и

String u = a.get("ip").toString(); 

короче "{а, б, в, г}" в Java не такой же, как term_to_binary ({а, Ь, c, d}) erlang

Здесь вы преобразовываете двоичный термин erlang в строку. если вы хотите сохранить, вам нужно сохранить строку, а затем двоичную, а затем восстановить ее.

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