当前位置: 首页 > 知识库问答 >
问题:

序列化:基本理解和文档

越飞鸾
2023-03-14

在流中,对任何对象的第一个引用会导致对象被序列化或外部化,并为该对象分配句柄。对该对象的后续引用被编码为句柄。使用对象句柄可以保留对象图中自然出现的共享和循环引用。对对象的后续引用仅使用句柄,从而允许非常紧凑的表示形式。

除可序列化字段外,基本数据以块数据记录的形式写入流,每条记录都以标记和记录中字节数的指示作为前缀。

  1. 以上内容来自Oracle Docs for Serialization。我正在阅读《序列化》以获得更好和深入的理解,请有人帮助我用简单的英语解码突出显示的部分。(我在如何生成流的上下文中寻找答案,尤其是当它谈到原始数据如何存储在缓冲区中时)

当我们想要:

    < li >在JVM - file/db的生命周期之后保持状态 < li >通过网络数据交换将数据发送到另一个基于jvm的应用程序

文件:https://docs.oracle.com/javase/6/docs/platform/serialization/spec/serial-arch.html

共有1个答案

东门玺
2023-03-14

只是我对#1的理解序列化后的对象流基本上包括5个部分:

  • 声明这是序列化文件和序列化版本的标头。
  • 类的信息,如名称、序列化id(seralVersionUID)、字段数等。
  • 字段描述
  • 父类信息
  • 字段的值。

检查ObjectOutputStream中的这些代码:

if (obj instanceof String) {
    writeString((String) obj, unshared);
} else if (cl.isArray()) {
    writeArray(obj, desc, unshared);
} else if (obj instanceof Enum) {
    writeEnum((Enum<?>) obj, desc, unshared);
} else if (obj instanceof Serializable) {
    writeOrdinaryObject(obj, desc, unshared);
} else {
if (extendedDebugInfo) {
    throw new NotSerializableException(
    cl.getName() + "\n" + debugInfoStack.toString());
} else {
    throw new NotSerializableException(cl.getName());
}

对于#2,我认为hibernate/jpa只是通过查询将它们写入数据库,它们不需要序列化对象。如果需要跨JVM或其他用途传输,可以使用Serializable实现实体(我认为在基于web的应用程序中最好使用serialization)。

 类似资料:
  • 本文向大家介绍详解PHP序列化和反序列化原理,包括了详解PHP序列化和反序列化原理的使用技巧和注意事项,需要的朋友参考一下 0.前言 对象的序列化和反序列化作用就不再赘述,php中序列化的结果是一个php自定义的字符串格式,有点类似json. 我们在任何语言中设计对象的序列化和反序列化都需要解决几个问题 把某个对象序列化之后,序列化的结果有自描述的功能(从序列化的结果中知道这个对象的具体类型, 知

  • 在Spark中,如何知道哪些对象在driver上实例化,哪些对象在executor上实例化,因此如何确定哪些类需要实现Serializable?

  • 本文向大家介绍详解Java 对象序列化和反序列化,包括了详解Java 对象序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反。在我们看来这种行为实在是繁琐,尤其是在这个对象中属性值很多的时候。基于此,Java中对象的序列

  • 本文向大家介绍Java 序列化和反序列化实例详解,包括了Java 序列化和反序列化实例详解的使用技巧和注意事项,需要的朋友参考一下 Java 序列化和反序列化实例详解 在分布式应用中,对象只有经过序列化才能在各个分布式组件之间传输,这就涉及到两个方面的技术-发送者将对象序列化,接受者将对象反序列化,下面就是一个很好的例子! 1.实体-Employee 2.SerializeHelper 3.测试类

  • 本文向大家介绍.Net中的序列化和反序列化详解,包括了.Net中的序列化和反序列化详解的使用技巧和注意事项,需要的朋友参考一下 序列化和反序列化相信大家都经常听到,也都会用, 然而有些人可能不知道:.net为什么要有这个东西以及.net Frameword如何为我们实现这样的机制, 在这里我也是简单谈谈我对序列化和反序列化的一些理解。 一、什么序列化和反序列化 序列化通俗地讲就是将一个对象转换成一

  • 如题目所述,想请教一下大佬们在Java中序列化与反序列化的意义是什么,如何理解Java的序列化和反序列化?