я предполагаю, что я новичок в нетти; я пытаюсь создать клиента для внешнего сервера, этот сервер выводит сообщения, оканчивающиеся на 0x0d, поэтому я решил использовать DelimiterBasedFrameDecoder для обработки этих сообщений.
Это всего лишь тест обработчика:
public class TestHandler extends DelimiterBasedFrameDecoder {
public TestHandler(){
super(200, true, ChannelBuffers.wrappedBuffer(new byte[] { 0x0d }));
}
@Override
protected Object decode(ChannelHandlerContext ctx, Channel ch,
ChannelBuffer cbuf) throws Exception {
ByteBuffer buf = ByteBuffer.allocate(cbuf.readableBytes());
cbuf.readBytes(buf);
byte[] data = buf.array();
for(byte b : data){
System.out.print(b + " ");
}
System.out.println();
...... (some other code)
}
из этого я вижу неправильное то, что он не удаляет разделитель, как я указал в конструкторе; в конце данных byte [] у меня всегда есть 0x0d;
Итак, в качестве теста я изменил разделитель в конструкторе, добавив в него значение теста, например 0x55
super(200, true, ChannelBuffers.wrappedBuffer(new byte[] { 0x55 }));
и работает точно так же, отличий от этого нет.
Я думаю, что я использую его неправильно или читаю данные неправильно.
Как правильно использовать этот класс?
Для ясности, в реальном коде из этого обработчика я создаю объект из прочитанных данных и возвращаю этот объект из метода decode (), затем у меня есть другой обработчик, расширяющий SimpleChannelHandler, который получает этот объект (он аналогичен к примеру в руководстве пользователя).
Спасибо за помощь
Bye