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
