Le 7/24/12 7:12 PM, Brendan Crowley a écrit :
Ok, so i've updated my classes to use IoBuffer instead of ByteBuffer, so my 
classes are now:

This is my Encoder:

public class ServiceEnvironmentMessageEncoder extends ProtocolEncoderAdapter {
     public void encode(IoSession session, Object message, 
ProtocolEncoderOutput out) throws EncoderException {
         ServiceEnvironmentMessage serviceEnvironmentMessage = 
(ServiceEnvironmentMessage)message;
         IoBuffer buffer = null;
         buffer = serviceEnvironmentMessage.encode(buffer);
         buffer.rewind();
         out.write(buffer);
     }
}

And my decoder:

public class ServiceEnvironmentMessageDecoder extends CumulativeProtocolDecoder 
{
     protected boolean doDecode(IoSession session, IoBuffer in, 
ProtocolDecoderOutput out) throws DecoderException {
         IoBuffer inFlipped = in.flip();
         byte[]inArray = inFlipped.array();
         out.write(decode(inArray));
         return true;
     }

     private ServiceEnvironmentMessage decode(byte[] stream) throws 
DecoderException {
         IoBuffer iob = IoBuffer.wrap(stream);
         ServiceEnvironmentMessageContainer container = new 
ServiceEnvironmentMessageContainer(ServiceEnvironmentMessageGrammar.getInstance());
         decoder.decode(iob, container);
         ServiceEnvironmentMessage message = 
container.getServiceEnvironmentMessage();
         container.clean();
         return message;
     }
}

You're still doing a IoBuffer -> byte[] -> IoBuffer transformation between the doDecode and the decode method. What for ?


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

Reply via email to