在写之前不禁的感叹一下 I/O 写的太牛x了
写在前面
java提供了 ObjectInputStream / ObjectOutputStream 将java对象作为可存储的字节数组写入文件或者传输。而对象的传输就少不了序列化。
序列化
java的序列化 Serializable
缺点:
1、无法跨语言,别的语法无法反序列化。
2、利用的大量的反射机制,占用内存过高。
3、序列化后的码流太大
android的序列化 Parcelable
//TODO
google的ProtoBuf
文本数据结构描述语言,与平台和语言无关 C++ python java
自动生成代码
结构化文档更容易管理和维护
性能高,生成的码流小,速度快
支持定义可选和必须字段
//解码前处理半包
pipeline.addLast(new ProtobufVarint32FrameDecoder());
pipeline.addLast(new ProtobufDecoder(new MessageLite()));
//编码前处理半包
pipeline.addLast(new ProtobufVarint32LengthFieldPrepender());
pipeline.addLast(new ProtobufEncoder());
处理半包的一般方法
1、addLast(new ProtobufVarint32FrameDecoder())
2、继承通用的半包解码器LengthBasedFrameDecoder
3、继承ByteToMessageDecoder,自己处理半包消息
Fackbook的thrift
//TODO
JBoss的Marshalling
在netty中有Marshalling解码器
