程序员常用的几种序列化方法,总有一种是你在用的每个系统都会很大,所以为了提高服务间的通信效率和数据传输的性能,我们往往会把需要传输的数据序列化,然后传输它。什么是连载相信连载大家都知道。在Java中,我们经常可以看到很多实体类或者POJO都实现了Serializable接口。了解过Serializable接口的应该知道这个接口是一个空接口。,只是为了标记。所谓序列化,简单来说就是在传输对象之前将对象转换为二进制字节进行传输,接收端在接收到二进制数据后反序列化为普通对象。所以序列化的最终目的是让对象可以跨平台存储,通过网络传输。之所以需要序列化是因为在网络传输的时候,我们需要经过IO,而IO传输支持字节数组的格式,所以序列化之后可以更好的传输。另外,反序列化是根据字节数组逆向生成对象,是一个逆过程。常见的序列化方式知道了什么是序列化之后,我们来看看常见的序列化方式。目前最流行的JSON序列化方式无非就是JSON,而JSON是前后端交互使用最广泛的格式,形式如下。作为最通用的格式,它被各种语言所支持,可以支持复杂的对象。{"name":"鸭血粉丝","age":4,"sex":"Male"}JSON作为一种序列化方案,具有可读性高、跨平台、跨语言支持等优势;但是有第一个缺点就是体积大,冗余内容很多,比如双引号,花括号。相信大家在工作中都会广泛使用JSON。阿里提供的fastjson包是我们项目中必不可少的依赖。com.alibabafastjsonXML鸭血粉丝4男几年前不管是用SSM还是用Spring,都会有很多XML配置文件,现在很多它们被注释所取代。但是仍然支持XML。此外,在广电、银卡等一些老系统中,还有很多基于XML协议开发的系统和服务。阿芬在做项目之前遇到过一个银行项目,是很老的XML协议。连接起来很头疼~从上面的例子可以看出XML协议的优缺点和JSON类似,优点是可读性很强,跨平台跨语言支持,缺点是它体积大,很容易包含很多内容。可以看出,为了记录一个字段的值,每个标签都需要成对存在,过于冗余。ProtobufProtobuf是Google提出的一种序列化协议。Protobuf是一种接口定义语言,与语言和平台无关。它是一种将结构化数据序列化并通过网络传输的方式,使用Protobuf传输二进制文件,相比JSON的字符串格式提高了传输速度。这里提到Protobuf是一种接口定义语言,描述也是一种语言。既然是语言,就有自己的关键字和规则,所以对于Protobuf协议,我们需要创建一个后缀为.protosyntax="proto2";packagecom.demo;messageRequest{requiredint32version=1;必需的字符串id=2;消息模型{需要int32id=1;必需的字符串pid=2;可选的int32宽度=3;可选的int32高度=4;可选int32pos=5;}repeatedModelmodel=3;}message关键字表示定义一个结构体,required表示必须,optional表示可选,另外还有字段的名称和类型。这个原始的proto文件是通用的,只需要定义一次,无论使用哪种语言,proto工具都可以自动生成对应语言的代码。例如,要生成Java代码,我们可以执行如下命令protoc--java_out=。demo.proto会在指定目录下生成对应的Demo.java。如果想生成其他语言的代码,只需要修改命令执行的参数即可,生成的代码内容会有很多,直接使用即可,不用管。我们一次定义模型的结构,然后使用生成的源代码,使用Java、Python、Go、Ruby、C++等各种语言,轻松地在各种数据流中写入和读取结构化数据。Protobuf的优点主要是高性能和小体积。缺点是需要根据Protobuf命令学习具体的关键字和下载工具。ThriftThrift也是一种序列化协议。具体使用方法和Protobuf类似,只是Thrift是Facebook提出的协议。Thrift是一种接口描述语言和二进制通信协议。最初由Facebook于2007年开发,2008年正式提交给Apache基金会托管,成为Apache下的一个开源项目。Thrift是一个使用自定义二进制通信协议设计的RPC通信框架。与传统的HTTP协议相比,它的传输效率更高,占用带宽更少。另外,Thrift是跨语言的。Thrift的接口描述文件可以通过它的编译器生成不同开发语言的通信框架。Thrift的使用方式与Protobuf类似。它还有一个.thrift后缀的文件,然后通过命令生成各种语言的代码,这里就不演示了。除了上述四种序列化方式外,还有Hessian、JDKnative等序列化方式,不再一一介绍。序列化协议的选择前面提到了序列化协议的方式有几种,那么我们在平时的项目中使用的时候应该如何选择适合自己的协议呢?需要注意哪些方面?每个协议都有每个协议的特性。我们应该根据实际场景来选择选择哪种协议。比如如果是前后端对接,那么JSON自然是最适合的,对网页的交互要求也不能太高。级别是可以接受的,因此我们可以更多地关注可读性。但是如果是微服务之间的数据传输,那么我们可以选择Protobuf或者Thrift等更高效的协议进行传输,因为这种场景下我们对协议序列化的体积和速度有很高的要求。总结今天阿粉给大家介绍了几个序列化协议。我相信你一定会在日常工作中使用它们。您是否使用了上述所有协议?欢迎在评论区留言讨论。