Например, у меня есть такой класс:
public class Data{
private int session;
private int port;
private int type;
private FullHttpRequest http;
}
И я хочу закодировать этот объект, это мой конвейер
new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline()
.addLast(new LengthFieldPrepender(2))
.addLast(new IntegerEncoder())
.addLast(new HttpRequestEncoder())
.addLast(new ClientMessageEncode());
}
}
И ClientMessageEncode:
public class ClientMessageEncode extends MessageToMessageEncoder<Data> {
@Override
protected void encode(ChannelHandlerContext ctx, Data msg, List<Object> out) throws Exception {
out.add(msg.type);
out.add(msg.port);
out.add(msg.session);
out.add(msg.getHttp());
}
}
И проблема в том, что LengthFieldPrepender будет вызываться четыре раза, результирующие байты, такие как '0 4 тип 0 4 порт ......'.
"длина сеанса порта типа .. .... "- это мое ожидание.
Я пытался написать класс extends HttpObjectEncoder, но это слишком сложно ...
Я впервые использую netty, пожалуйста дайте мне больше советов