当前位置: 首页 > 网络应用技术

这些东西的爪哇序列化

时间:2023-03-08 23:56:37 网络应用技术

  只有可序列化或外部化的类别类别的对象才能被序列化

  让序列化对象实现可序列化接口,然后创建一个输出流,然后调用输出的对象方法可以序列化

  此外,在实现可序列化接口时,您还可以重写writeObject()和readObject()方法。这样,一旦对象被序列化或召回,这两种方法将自动调用,而无需使用默认的默认方法。进行序列化机制。

  我们还有其他三种方法可以自定义自己的序列化和序列化过程:

  当深处的对象是时,您需要创建输入流,然后调用对象以获取序列化对象。

  必须注意的是:

  对于不想序列化的字段,您可以在字段类型之前添加瞬态关键字修改(在依赖序列化时将给出默认值)

  目前,在IT的衍生化后,如果属性由数据类型引用,则返回了null。如果属性是基本数据类型(例如int类型),则默认值0(布尔值的默认值为false,false是false)

  当服务器将序列化对象数据发送给客户端时,对象中的某些数据(例如密码字符串等)。仅当执行客户端时,才能读取密码,以便将其数据安全性的数据安全可以在一定程度上确保序列化对象。

  序列化时,当前类写入字节序列(也将写在序列化文件中),并且在派生流时将在字节流的速度中比较字节流。如果执行相同的单词,,失败不一致(报告异常)

  如果未明确指定,VM将像上述程序一样生成(消耗资源)默认值。

  有三种生成()的方法::):

  当序列化等级增加属性时,最好不要修改它以避免衍生化的失败

  定制的序列化策略

  如果我们在序列化过程中或换句话说,我们有其他需求,我们希望该对象的一部分可以被序列化,而另一部分不会被序列化。目前,可以实现可外部化的接口,并且可以实现两种方法:writeexternal()和readexternal(),这两种方法在序列化和衍生化过程中自动调用以执行一些特殊操作。

  必须注意的是:

  摘要:当使用外部化序列化时,当读取对象时,将调用无类构造函数来创建一个新对象,然后分别填充保留对象的字段值,然后将其填充到新对象中。必须向构造函数提供公开访问权限;否则,Java.io.invalidclassexception将被抛弃。

  对象序列不会序列化静态变量。这是因为对象序列已被序列化以序列化对象的状态,并且静态变量属于类变量,即类的状态。因此,对象的序列化不能保存静态变量。序列化。保存在对象的状态中,静态变量属于类的状态。

  序列化通过反映非参数的建设性方法来创建一个新对象,因此序列化将破坏单打模式。

  解决方案是:单打类中的手写readresolve()函数,然后直接返回单身对象:

  这样,当导数从流读取对象时,readresolve()被调用,返回的对象被新构建的对象替换。

  主流库是

  Fastjson是阿里巴巴的开源JSON解析库。

  Gson是Google发布的开源Java库。它也是一个有效的Java对象序列化和依赖化框架。

  杰克逊还是Java语言实施的开源工具。这是春季JSON的默认实现。尽管多年来一直没有维护,但仍被广泛使用。

  有三个核心模块

  Hessian是基于二进制的协议。Hessian支持许多语言,例如Java,Python,C ++,Net/C#,D,Erlang,Php,Ruby,Object-C等。类似Java的Java本机序列化,序列化/深化的对象也必须实现可序列化的界面,代码的写入也类似于Java本机序列化。

  注意:

  Kryo是一个快速高效的Java序列化框架,旨在提供快速,高效且易于使用的API。无需文件,数据库或网络数据,Kryo可以随时完成序列化。Kryo还可以执行自动深层复制(克隆)和浅副本(克隆)。这是对象的直接副本,而不是对象 - > byte->对象的副本。

  Kryo是一个非常成熟的序列化实施,已在Twitter,Groupon,Yahoo和多个著名的开源项目(例如Hive,Storm)中广泛使用。

  Dubbo RPC的默认序列化是Hessian2。将来,当Kryo或FST应用于Dubbo的成熟时,Dubbo可能会将Dubbo RPC的默认序列化从Hessian2更改为其中一个。

  Kryo配备了许多Java Basic Serialializer,因此尽管不知道序列化器,Kryo会自动匹配:

  尽管Kryo的性能非常出色,但目前尚未在类似于Springboot SpringCloud的应用中练习。例如,SpringCloud默认用于使用Jackson(当然,您也可以替换FastJson)。可能是因为:

  目前,Kryo的应用程序可以与Redis应用程序进行交互。诸如Redis之类的存储工具可以安全地存储二进制数据,因此您可以直接存储直接序列化的数据。这里有一个示例。

  它像JSON一样,但是快而小。

  MessagePack是一种有效的二进制序列化格式。它允许您在JSON等各种语言之间交换数据。但是它比JSON更快且小。小整数已编码为字节,而短字符串只需要一个字节大小。比它的长度。

  请注意,您需要添加@Message注释以使用MessagePack

  FST序列化是快速序列化工具,是Java序列化的实现。FST的功能如下:

  Dubbo用fstobjectInput和fstobjectOutput重新安装了序列化和风险问题。

  并构建了FstFactory Factory类,使用工厂模式生成fstobjectInpput和fstobjectOutput。同时使用单个模式来控制整个应用程序中的fstConfiguration作为单个情况,以及在初始化过程中需要串行的所有对象已注册为FSTCONFICUTION。

  提供一个统一的串行界面FSTerialization,以提供序列化和应对功能。

  协议缓冲区是Google发布的数据交换格式,该格式提供了跨语言,跨平台序列化和派生化。

  使用基于Java的Protobuf仍然很麻烦。您可以参考

  步骤是:

  介绍

  在src/main下创建一个新的目录prop/main,在proto目录中创建新文件

  下载ProtoC,使用ProtoC命令编译原始文件,然后将其编译到Java目录

  使用编译文件文件

  使用

  Protobuf的优势和缺点:

  优势:

  缺点

  节俭是一个包含串行功能和支持服务通信的RPC框架,主要包括三个部分:代码生成,序列化框架和RPC框架,它大致相当于Protoc + Protobuffer + GRPC,并支持大量语言,以确保这一常见的语言功能是由Cross -Language稳固的常见功能,它是RPC解决方案的完整堆栈。Thrift最初是由Facebook开发的,后来由ASF管理。

  节俭支持各种序列化协议,通常使用:二进制,紧凑,JSON

  节俭的序列化和衍生化步骤:

  看来这些步骤有点像Protobuf,因此相对麻烦。我在这里不会制作代码。

  Avro(发音与[?vr?]相似)是Hadoop的子项目,由Hadoop创始人Doug Cutting(也是Lucene,Nutch和其他项目的创始人)领导的。Avro是基于二进制数据传输的中间件。在其他Hadoop项目(例如HBase和Hive的客户端和服务器数据传输)中,此工具还使用此工具。Avro是数据序列化系统。Avro可以将数据库或对象转换为格式,以方便存储或传输。设计,它用于支持数据密集型应用程序,适用于远程或本地大型数据存储和交换。它的主要特征是:

  Avro提供了两种序列化和更深层化的方法。一种是通过模式文件生成代码,另一种是生成代码的常见方法。

  分析性能

  序列化空间的头顶

  在三个JSON序列化实施中

  上面描述的序列化和背部序列化协议具有相应的特征,适用于不同方案:

  上述代码中所有相关库的Maven如下: