Как кодировать сложный java объект в Netty - PullRequest
0 голосов
/ 12 апреля 2020

Например, у меня есть такой класс:

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, пожалуйста дайте мне больше советов

...