JInterface question

Olivier Sambourg <>
Wed Jun 15 21:29:22 CEST 2005


Thank you, I'll check this doc.

My only problem with this leading byte is that I have to manually add  
or remove it on the client side so that I can retrieve the data, even  
though the OtpInputStream and OtpOutputStream classes are supposed to  
be used to manipulate data in the Erlang external format. Am I  
missing something ?

 From the OtpOutputStream class documentation :
Provides a stream for encoding Erlang terms to external format, for  
transmission or storage.

Anyway my problem can be solved like this :

public void sendObject(OtpErlangObject O) throws XMPPException {
         OtpOutputStream stream = new OtpOutputStream();
         String data;
         stream.write((byte) 131); // add leading byte
         stream.write_any(O);
         data = Base64.encodeBytes(stream.toByteArray());

         sendMessage(data);
     }

public OtpErlangObject receiveObject(String encoded) throws  
OtpErlangDecodeException {
             byte[] decoded = Base64.decode(encoded);
             OtpInputStream stream = new OtpInputStream(decoded, 1,  
decoded.length - 1); // strip leading byte
             OtpErlangObject obj = OtpErlangObject.decode(stream);

             return obj;
     }


Regards,

--
Olivier



Le 15 juin 05 à 20:49, Vlad Dumitrescu a écrit :

> ----- Original Message ----- From: Olivier Sambourg
>
>> It seems the only difference is the leading 131 byte in erlang.
>> Can anyone confirm that it is always present ? If it is the case,
>> I guess I have my solution.
>>
>
> Hi,
>
> Yes, the 131 (*) is always there, because term_to_binary encodes  
> into Erlang external format.
>
> See also $ERL_TOP/erts/emulator/internal_doc/erl_ext_dist.txt for  
> details about the format, if you're interested.
>
> regards,
> Vlad
>
> (*) Future releases might change the actual value, I think, because  
> it's a "version magic" field.
>




More information about the erlang-questions mailing list