九、编解码技术

一、Java序列化
基于Java提供的对象输入和输出流(ObjectInputStream和ObjectOutputStream),可以把Java对象作为可存储的字节数组写入文件,也可以传输到网络中。对于我们开发人员来说,基于JDK默认的序列化机制可以避免操作底层的字节数组,从而提升开发效率。 序列化的目的: (1)网络传输 (2)对象持久化 当进行远程跨进程服务调用时,需要把被传输的Java对象编码为字节数组或者ByteBuffer对象,而当远程服务读取到ByteBuffer对象或者字节数组时,需要将其解码为发送时的Java对象。这就是Java对象的编解码技术。而Java序列化仅仅是Java编解码技术的一种。

二、Java序列化的缺点
(1)无法跨语言 对于跨继承的服务调用,服务提供者可能会使用C++或者其它语言开发,当我们需要和异构语言进程交互时,Java序列化就难以支持。 由于Java序列化技术是Java语言内部的私有协议,其它语言并不支持,对于用户来说,就是个黑盒。由于Java序列化后的字节数组,别的语言无法进行反序列化,这就严重限制了它的应用。

(2)序列化后的码流太大

(3)序列化性能太差

通过对比Java序列化和二进制编码的性能差异,可以得到序列化后的码流大小和序列化的性能,表现的都很差,因此并不会选择Java序列化作为远程跨节点调用的编解码框架。业界有许多优秀的编解码框架,在克服了JDK默认序列化框架的缺点的基础上,还增加了很多亮点,比如说Google的Protobuf、Facebook的Thrift等。

你可能感兴趣的:(netty)