java序列化有哪些方式

Java 序列化(Serialization)是将 Java 对象转换为字节序列的过程,而逆向的过程则称为反序列化(Deserialization),即将字节序列转换为 Java 对象。Java 序列化可以将一个 Java 对象转换成字节序列,然后可以把这个字节序列存储到文件、数据库或网络等地方。在一些需要用到远程调用的情况下,Java 序列化也可以实现跨进程通信。

Java提供了两种序列化方式:

1. Java标准序列化(Java Serialization):

Java 标准序列化是 Java 提供的序列化方式。通过实现 java.io.Serializable 接口来标识类是可序列化的。在使用标准序列化时,只需要把对象直接写入输出流或读取输入流就能对对象进行序列化和反序列化。

2. 第三方序列化工具(如Google Protobuf、Apache Thrift、JSON等):

第三方序列化工具则提供了更高效、更灵活、更安全的序列化方法。相比于 Java 标准序列化,在序列化小对象、序列化速度、序列化后数据大小、后续维护拓展等方面更有优势。由于第三方序列化工具不依赖 Java 序列化机制,因此更加稳定安全。
总的来说,Java 标准序列化方式在使用简单方便,但效率较低,而第三方序列化工具则提供了更高效、更灵活、更安全的序列化方法,但要求使用时需要额外学习掌握。在使用序列化工具时,需要根据实际需求来进行选择。

1.Java原生序列化
2.JSON序列化
3.XML序列化
4.Protocol Buffers序列化
5.Kryo序列化

1.Java原生序列化(Java Serialization):
Java原生序列化是一种Java标准库提供的序列化技术,可以将Java对象转换为字节流进行传输和存储。可以通过实现java.io.Serializable接口来实现序列化,但是Java原生序列化存在一些性能和兼容性的问题。
2.JSON序列化:
JSON是一种轻量级的数据交换格式,可以将Java对象序列化为JSON字符串,通过HTTP请求进行传输和存储。在Java中可以使用Gson、Jackson等第三方库实现JSON序列化。
3.XML序列化:
XML也是一种常用的数据交换格式,可以将Java对象序列化为XML格式进行传输和存储。在Java中可以使用JAXB等工具实现XML序列化。
4.Protocol Buffers序列化:
Protocol Buffers是一种高效的数据交换格式,由Google开发,可以将结构化数据序列化为二进制格式,具有高效、可扩展、跨语言等优点。在Java中可以使用Google提供的protobuf-java库实现Protocol Buffers序列化。
5.Kryo序列化:
Kryo是一种高效的Java序列化框架,可以将Java对象序列化为二进制格式进行传输和存储。Kryo序列化速度较快,序列化后的数据体积也较小,适合用于需要高性能和低网络带宽的场景。
以上几种序列化方式各有优缺点,需要根据具体的业务需求和应用场景选择合适的序列化方式。例如,如果需要跨平台传输数据,则可以选择使用JSON或XML序列化;如果需要高效传输大量数据,则可以选择使用Protocol Buffers或Kryo序列化。

Hessian
是一个基于HTTP的高性能RPC框架,其序列化算法叫Hessian协议,是业界公认的一种高效率高压缩比的序列化方式,如:Dubbo框架就支持Hessian序列化方式。
XML
XML是一种很常见的数据保存方式,我经常用它来保存一些数据,或者是一些配置参数。由于XML具有优秀的跨平台、可读性好的特点,可用于构建基本的Web Services平台,不同于RPC框架,Web Services是基于HTTP协议的,通过SOAP协议,使运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。SOAP是基于XML为序列化和反序列化协议的结构化消息传递协议。Web Services还使用网络服务描述语言—WSDL(Web Services Description Language),用于描述Web Services以及如何访问Web Services,WSDL基于XML语言格式。Web services使用XML来编解码数据,并使用SOAP来传输数据。

序列化新面孔
Avro是Hadoop的一个子项目。
Avro设计用于支持数据密集型应用程序的数据格式,并具有很好的跨语言性,Avro数据通过与语言无关的schema来定义,schema通过JSON来描述,解析数据时使用schema,数据被序列化成二进制文件或JSON文件。序列化效率与Google的protobuffer相当。当数据密集型应用使用RPC进行网络传输时,Avro支持远程过程调用(RPC)协议。
Spearal是一个新的开源的序列化协议,这个协议旨在初步替换JSON 将HTML和移动应用连接到Java的后端。Spearal的主要目的是提供一个序列协议,这个协议即使是在端点间传输的复杂的数据结构中也可以简单工作:我们很快就能看到JSON的一些局限将会害了开发者, 这些局限是不会发生在一个好的通用的序列化格式中的。抛开这个主要目的,Spearal还提供了在标准JSON中没有的高级功能,如局部对象序列化、内建的对JPA的非初始化关联、不同型号的协调、对象特性过滤等。虽然还在初期发展阶段,但是Spearal再将HTML应用连接到Java后端上已经很有用了。

参考:
https://cloud.tencent.com/developer/article/1446854
https://blog.csdn.net/qq_43116031/article/details/129254826

你可能感兴趣的:(java基础,java,后端)