通过使用DelimiterBasedFrameDecoder、FixedLengthFrameDecoder实现分隔符和定长解码器。
JBossMarshalling编解码
JBoss Marshalling是一个Java对象序列化包,对JDK默认的序列化框架进行了优化,但又保存跟java.io.Serializable接口兼容,同时增加了一些可调的参数和附加特性,这些参数和特性可通过工厂类进行配置。
GoogleProtobuf编解码
Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,其优点如下。
- 在谷歌内部长期使用,产品成熟度高:
- 跨语言,支持多种语言,包括C十十、java和Python.
- 编码后的消息更小,更加有利于存储和传输:
- 编解码的性能非常高:
- 支持不同协议版本的前向兼容:
- 支辫定义可选和必选字段。
MessagePack编解码
MessagePack是一个高效的二进制序列化框架,它像JSON一样支持不同语言间的数据交互,但是它的性能更快,序列化之后的码流也更小。
由于MessagePack在业界得到了非常广泛的应用,将介绍如何利用Netty的CodeC框架新增对MessagePack的支持。
Java编解码中使用序列化的缺点
Java 序列化的主要目的有两个,网络传输和对象持久化。
Java序列化从JDK1.1版本就已经提供,它不需要添加额外的类库,只需实现java.io.Serializable并生产系列ID即可,因此,它从诞生之初就得到广泛的应用。
但是在远程服务调用(RPC)时,很少直接使用Java序列化进行消息的编解码和传输,这又是什么原因呢?下面通过分析Java序列化的缺点找出答案。
AIO编程示例
NIO 2.0的异步套接字通道是真正的异步非阻塞I/O,对应于UNIX网络编程中的事件驱动I/O(AIO)。它不需要通过多路复用器(Seletor)对注册的通道进行轮询操作即可实现异步读写,从而简化了NIO的编程模型。
Java获得可用的处理器个数
要获取java虚拟机可用的处理器个数,可以通过Runtime类的availableProcessors()方法得到,即Runtime.getRuntime().availableProcessors()。
Netty应用入门
一个简单的NIO服务端程序,如果我们直接使用JDK的NIO类库进行开发,竟然需要经过烦琐的十多步操作才能完成最基本的信息读取和发送,这也是我们要选择Netty等NIO框架的原因了。
Selector全面深入理解
最近在学习java NIO,发现java nio selector 相对 channel ,buffer 这两个概念是比较难理解的 ,把学习理解的东西以文字的东西记录下来,就像从内存落地到硬盘,把内存中内容换成该知识点的索引。