问题标签 [externalizable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
77 浏览

java - 获取 Externalizable 类中的所有序列化字段

我有几个 Externalizable 类。如何编写一个返回所有序列化字段的方法?或者,我如何确定哪些字段已被序列化?

0 投票
2 回答
706 浏览

java - 内部类的外部化

我正在浏览这个网站上关于外化的文章,我在外化部分的限制中找到了以下段落。

如您所知,在序列化实现 Externalizable 接口的对象时,将调用默认的公共无参数构造函数。因此,Java 中的内部类无法实现 Externalizable 接口,因为 Java 中的内部类的所有构造函数都将始终接受封闭类的实例作为前置参数,因此您不能使用无参数构造函数一个内部类。内部类只需实现 Serializable 接口即可实现对象序列化。

我对此进行了测试,结果证明这是无效的。内部类可以没有参数构造函数,也可以实现Externalizable接口。甚至在本地课程中尝试过。工作正常。

所以要么我遗漏了一些观点,要么文章段落不再有效(我使用的是 Java 7)。那么是哪一个呢。任何建议表示赞赏。

0 投票
1 回答
75 浏览

java - 关于 Externalizable 和 Serializable 的问题

我们可以使用 readResolve 和 writeReplace 方法为 Externalizable 和 Serializable 实例指定替换对象......

只是想知道几件事:

1) readObject(ObjectInputStream is ) 和 writeObject(ObjectOutputStream os) 方法能否与可序列化类的 readResolve() 和 writeReplace() 结合使用?是否可以替换对象,然后使用 readObject 和 writeObject 对字节流执行修改操作 2)Exteralizable 的 writeExternal 应显式与超类型协调以保存其状态。只是想知道 Serializable 超类也是如此(但是not Externalizable) 或 Serilizable 类状态在我们将实例写入流时自动保存?

0 投票
1 回答
109 浏览

java - 序列化可以进行定制,那么为什么要 Externalizable 呢?

我已阅读以下文章SO

可外部化还是可序列化?,

Java中的可序列化和可外部化有什么区别?.

但我的问题是Externalizable,与serializable.

可以通过提供我们自己的and实现来自定义实现Serialization的 a 。那么使用 和定制和实现的目的是什么。使用的真正好处是什么。我已经阅读了各种支持自定义的链接(包括上面的链接)。但我没有看到一个明显的赢家或无法使用. 很高兴看到一个例子。classSerializablewriteObjectreadObjectExternalizableReadExternalwriteExternalExternalizableExternalizableserializationExternalizableSerializable

为了更清楚起见,从此处提取了以下代码段:

当一个class实现Serializable interface时,它会向这些提供信息JVMinstances这些信息classes可以被序列化。除此之外,还有一个特别说明JVM

“在实现 Serializable 的类中查找以下两个方法。如果找到,则调用该方法并继续序列化过程,否则直接遵循标准序列化协议”

所以这让我们有机会编写这两个方法:

private void writeObject(ObjectOutputStream out) throws IOException;, private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;

里面Class那个实现Serializable,你得到一个serialization过程的钩子。您可以在这两种方法中编写自定义代码并自定义serialization.

0 投票
1 回答
1174 浏览

java - 如何在 Java 中按部分加载序列化对象

我正在尝试使用Externalizable接口在 Java 中序列化大尺寸的对象。

代码:

在程序执行期间填充的这三个数组列表具有非常大的大小(每个 14 MB)。

代码(加载/保存过程):

牢不可破的条件是我只想拥有一个文件,例如,Documents/Project/project1.res

如何加载对象的某些部分而不加载其他部分?可能吗?例如,当我只需要加载第三个数组列表(results3)时,我不需要加载前两个数组列表(results1 和 results2),但我知道访问 results3 的唯一方法是读取 results1 和 results2。

Tinke的答案代码:

在 ResultsData 类中:

0 投票
3 回答
66 浏览

java - 转换形式 int 到 long

我创建了一个名为的类Employee,并且我有一个ArrayList用于存储员工的所有联系电话的类。我已经定义了一个方法addcontact()来将数字添加到列表中。如果我使用 int 则表示数字超出范围,因此我将其更改为 long,但仍然出现相同的错误。

我正在使用 Externalizable 对Employee细节进行序列化和反序列化。

在此处输入图像描述

在此处输入图像描述

0 投票
2 回答
165 浏览

java - 可序列化和可外部化。反序列化时构造函数调用的区别

我已阅读以下文章:

http://javapapers.com/core-java/externalizable-vs-serializable/

在对象反序列化(重构)中,公共无参数构造函数用于重构对象。在 Serializable 的情况下,不使用构造函数,而是使用从 ObjectInputStream 读取的数据重新构造对象。
上述要点随后要求 Externalizable 对象必须具有公共的无参数构造函数。在 Seriablizable 的情况下,它不是强制性的。

关于构造函数调用是真的吗

可序列化:
反序列化仅调用最近的非Serializable祖先的构造函数

可外化:
反序列化只调用实现Externalizable接口的类的构造函数。

?

0 投票
1 回答
669 浏览

java - 外部化最终实例变量

这是我的示例代码:

它无法编译,因为id = in.readInt();Error:(36, 5) java: cannot assign a value to final variable id. 但是,我可以想到真实的用例,其中不可变字段(例如 id)需要外部化,同时我们还希望保持其不变性。

那么解决这个问题的正确方法是什么?

0 投票
1 回答
1912 浏览

java - 为什么即使存在默认构造函数,Java 也会抱怨“没有有效的构造函数”?

ExternalizableClass和类都有ExternalizableClass.Write默认(非参数)构造函数。但是在反序列化它时,Java 抱怨:

谁能解释一下问题是什么?

0 投票
3 回答
190 浏览

java - “可序列化”接口背后的基本原理是什么?

如果我们想序列化一个对象,我们可以简单地执行以下实现:

并且不需要额外的努力来强制实现对象将如何写入文件和从文件中读取。Java 只负责处理所有事情。

另一方面,Externalizable确实定义了显式的序列化和反序列化方法,因此我们可以进行命令式编程。

这给我留下了一个问题:如果不需要额外的努力Serializable,让它成为我们必须实现的接口来序列化/反序列化对象的理由是什么,而不是默认情况下每个对象都可以序列化/反序列化?