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.ObjectEncod

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里。


目录
相关文章
|
6月前
|
Java
05RPC - netty发送对象
05RPC - netty发送对象
24 0
|
4月前
|
编解码 缓存 移动开发
TCP粘包/拆包与Netty解决方案
TCP粘包/拆包与Netty解决方案
45 0
|
2月前
|
网络协议
Netty实现TCP通信
Netty实现TCP通信
43 0
|
15天前
|
网络协议 Java 物联网
Spring Boot与Netty打造TCP服务端(解决粘包问题)
Spring Boot与Netty打造TCP服务端(解决粘包问题)
26 1
|
3月前
|
编解码 前端开发 网络协议
Netty Review - ObjectEncoder对象和ObjectDecoder对象解码器的使用与源码解读
Netty Review - ObjectEncoder对象和ObjectDecoder对象解码器的使用与源码解读
45 0
|
10月前
|
网络协议
netty编程实战02-创建一个带有连接重试的tcp客户端程序
netty编程实战02-创建一个带有连接重试的tcp客户端程序
161 0
|
5月前
|
缓存 前端开发 Java
【Netty官方文档翻译】引用计数对象(reference counted objects)
【Netty官方文档翻译】引用计数对象(reference counted objects)
48 0
|
9月前
|
网络协议 算法
Netty入门到超神系列-TCP粘包拆包处理
TCP是面向连接的,服务端和客户端通过socket进行数据传输,发送端为了更有效的发送数据,通常会使用Nagle算法把多个数据块合并成一个大的数据块,这样做虽然提高了效率,但是接收端就很难识别完整的数据包了(TCP无消息保护边界),可能会出现粘包拆包的问题。
65 0
|
10月前
|
网络协议 Java
netty编程实战01-创建一个tcp服务端程序
netty编程实战01-创建一个tcp服务端程序
201 0
|
11月前
|
消息中间件 缓存 网络协议
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 下
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 下