On 1/24/12 5:42 PM, Robert Tomczyk wrote:
So this how i see it.
Every step i make in decoder i mean:
if(in.prefixedData(x)) // one step = decode next "element"
i have to put this data in my DecoderState for specific kind of data ? i.e.
MessageAstate,MessageXstate etc.
and if next step will return false. Then decoder will be executed again and
as in example i will check my specific decoder what kind of data should i
"load" (in.getSomething()). Do i get it right ?

Looking at your code, it seems that the doDecode() method is correct.

Basically, what you do for each data structure in your message is :

if (I have N bytes in the stream where N is the number of bytes I need for the data structure I will read)
      then
        continue with the next bytes
      else
        return false // will wait until enough data is coming

until you have completed the decoding. That's fine, because you always check that you will be able to read an enum (1 byte), an integer (4 bytes) etc.

Also note that you will start over from the beginning until you have enough bytes in the IoBuffer (the IoBuffer will be expanded to receive the extra bytes until the doDecode method returns true)

For Strings, you should be careful though : the String <-> bytes conversion has to take care of the encoding. On one computer, if you just do something like myString.getBytes(), you will get the bytes using a local encoding (ISO-8859-1 on Windows, but most certainly UTF-16 on linux, or something else, depending on your local env). The best is to decode using one specific encoding.



--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com

Reply via email to