netty tcp 字节有序->对象有序


io.netty.handler.codec.serialization.ObjectDecoder
将ByteBuf[]反序列化为java对象。
A decoder which deserializes the received ByteBufs into Java objects. 


io.netty.handler.codec.serialization.ObjectEncoder
编码器,将java对象序列化为一个netty的ByteBuf对象。
An encoder which serializes a Java object into a ByteBuf. 

要求传送的类实现java.io.serializable接口。用法见下。

  Bootstrap b = new Bootstrap(); 
  b.handler(new ChannelInitializer<SocketChannel>() {
                @Override
                public void initChannel(SocketChannel ch) throws Exception {
                    ch.pipeline().addLast(new ObjectEncoder(),
                   		 new ObjectDecoder(ClassResolvers.cacheDisabled(null)),
						 new TcpClientHandler());
                }
   });

完整的项目示例见github。

https://github.com/chuchu9293/NettyTcpObjOrdering

其他Decoder

ByteToMessageDecoder是ChannelHandler的一个实现类,他可以在处理数据拆分的问题上变得很简单。
每当有新数据接收的时候,ByteToMessageDecoder都会调用decode()方法来处理内部的那个累积缓冲。
Decode()方法可以决定当累积缓冲里没有足够数据时可以往out对象里放任意数据。当有更多的数据被接收了ByteToMessageDecoder会再一次调用decode()方法。
如果在decode()方法里增加了一个对象到out对象里,这意味着解码器解码消息成功。ByteToMessageDecoder将会丢弃在累积缓冲里已经被读过的数据。请记得你不需要对多条消息调用decode(),ByteToMessageDecoder会持续调用decode()直到不放任何数据到out里。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值