![]() |
1
139
Serialization 将一个对象从内存持久化为一个位序列,例如保存到磁盘上。反序列化是相反的—从磁盘读取数据以创建对象。 在您的问题的上下文中,它是一个接口,如果在类中实现,则该类可以由不同的序列化程序自动序列化和反序列化。 |
![]() |
2
46
虽然大多数用户已经给出了答案,但我想为那些需要它的人添加一个例子来解释这个想法:
可以将该对象序列化为多个流。我将对两条溪流这样做: 序列化到标准输出:
序列化到文件:
然后:
|
![]() |
3
42
这意味着类的实例可以转换成字节流(例如,保存到文件中),然后再转换回类。这种重新加载可能发生在程序的不同实例中,甚至可能发生在不同的机器上。序列化(在任何语言中)涉及各种各样的问题,尤其是当您在可序列化对象中有对其他对象的引用时。 |
![]() |
4
16
Here is a detailed explanation of the Serialization :(我自己的博客) 序列化:
序列化需要什么?
代码示例和说明: 首先让我们看看Item类:
在上面的代码中可以看到 项目 类实现 可序列化 这是使类可以序列化的接口。 现在我们可以看到一个变量 序列版本ID 初始化为长变量。编译器根据类的状态和类属性来计算这个数字。这个数字将帮助jvm在从文件中读取对象的状态时识别对象的状态。
如果您注意到我们使用的另一个关键字 瞬变 . 如果字段不可序列化,则必须将其标记为transient。在这里我们标记了 项目成本价 是暂时的,不想写在文件里
在上面我们可以看到一个序列化和反序列化对象的例子。 为此我们用了两个班。对于序列化对象,我们使用了ObjectOutputStream。我们使用writeObject方法将对象写入文件。 对于反序列化,我们使用了ObjectInputStream,它从文件中读取对象。它使用readObject从文件中读取对象数据。 上述代码的输出如下:
注意 项目成本价 因为它不是书面的。 |
![]() |
5
11
序列化包括将对象的当前状态保存到流中,并从该流中恢复等效对象。流充当对象的容器 |
![]() |
6
6
Serializable类似于接口调用,但更像是在运行时调用序列化子系统的标志。上面说这个物体可以保存。将保存所有对象实例变量,但无可序列化对象和标记为volatile的对象除外。 想象一下,你的应用程序可以改变颜色作为一个选项,而不保持外部设置,你将需要改变颜色,每次你运行它。 |
![]() |
7
4
序列化是一种将对象和数据存储或写入文件的技术。通过使用
用数字清楚地解释。 See Here for more info |
![]() |
8
2
从另一个角度呈现。序列化是一种称为“标记接口”的接口。标记接口是不包含方法声明的接口,但是 仅将实现接口的类指定(或标记)为具有 一些财产。如果你理解多态性,这将非常有意义。在可序列化标记接口的情况下ObjectOutputStream.write如果(Object)方法的参数未实现接口,则该方法将失败。这是java中的一个潜在错误,可能是ObjectOutputStream.write(可序列化) 强烈推荐:阅读 约书亚·布洛赫的《有效Java》 |
![]() |
9
2
正在将对象的状态写入文件/网络或任何位置。(表示Java对象支持的窗体到文件支持的窗体或网络支持的窗体) 反序列化: |
![]() |
10
1
|
![]() |
Mehul Santoki · 当我点击自动链接url时,应用程序崩溃 7 年前 |
![]() |
MDP · 关于可包裹界面的说明 7 年前 |
|
Daniel · 如何实现可序列化以使我的项目具有持久性? 7 年前 |
![]() |
Warblr · 是否再次传递可序列化对象或查询数据库? 10 年前 |