首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中序列化的需求是什么?

Java中序列化的需求是什么?
EN

Stack Overflow用户
提问于 2010-03-19 14:46:53
回答 8查看 75.5K关注 0票数 72

谁能告诉我在Java中序列化的需求是什么,并给我一个示例场景来解释这种需求?(我已经理解了什么是序列化,我只是想知道你什么时候会用到它)。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-03-19 14:54:16

序列化通常在需要通过网络发送数据或存储在文件中时使用。我所说的数据是指对象,而不是文本。

现在的问题是,您的网络基础设施和硬盘是能够理解位和字节的硬件组件,而不是JAVA对象。

序列化是将Java对象的值/状态转换为字节,以便通过网络发送或保存它。

这类似于语音在PSTN电话线上的传输方式。

票数 151
EN

Stack Overflow用户

发布于 2011-06-12 20:28:27

关于序列化的小故事

经过多年的辛勤工作,地球上的科学家开发出了一种可以帮助他们进行日常工作的机器人。但是这个机器人的特征比火星科学家开发的机器人要少。

在两个星球的科学家会面后,决定火星将他们的机器人送到地球上。但是出现了一个问题。将100个机器人送上地球的成本是1亿美元。它需要大约60天的旅行时间。

最后,火星的科学家决定与地球的科学家分享他们的秘密。这个秘密是关于类/机器人的结构的。地球上的科学家在地球上也开发了同样的结构。火星上的科学家序列化了每个机器人的数据,并将其发送到地球。地球的科学家反序列化的数据,并相应地将其输入到每个机器人中。

这一过程为他们节省了大量数据通信的时间。

其中一些机器人被用于火星上的一些防御工作。因此,他们的科学家在将数据发送到地球之前,将这些机器人的一些关键属性标记为瞬态。请注意,当对象被反序列化时,瞬态属性被设置为null (在引用的情况下)或默认值(在原始类型的情况下)。

地球科学家注意到的另一点是,火星的科学家要求他们创建一些静态变量来保存有关环境的细节。这些细节被一些机器人使用。但是火星的科学家们并没有分享这些细节。因为地球的环境和火星的环境不同。

即使知道了机器人的类结构,并且有序列化的数据,地球的科学家也不能反序列化可以使机器人工作的数据。

代码语言:javascript
复制
Exception in thread "main" java.io.InvalidClassException:
SerializeMe; local class incompatible: stream classdesc
:

火星的科学家们一直在等待全额付款。一旦付款完成,火星的科学家就与地球的科学家分享了serialversionUID。地球科学家将其设置为机器人类,一切都开始工作。

更新

尽管在序列化的帮助下,他们能够使用信号而不是实际的宇宙飞船发送数据,但他们意识到发送大量数据仍然是一个挑战。序列化使得这个过程更便宜、更快,但它仍然很慢。因此,不同的科学家提出了不同的想法来减少数据大小。一些科学家建议压缩数据,一些科学家建议使用不同的机制来表示数据,以便可以将其反序列化。其中一些想法是XMLJSONmsgpack

票数 196
EN

Stack Overflow用户

发布于 2010-03-19 14:49:55

当您想要将对象的状态保存到文件中或通过网络发送时,您需要将其转换为一系列字节。这称为序列化。

Java有一个内置的机制,其他选项包括XML或JSON。

需要的示例:缓存对象、进行远程方法调用、将对象图保存到磁盘。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2475448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档