谁能告诉我在Java中序列化的需求是什么,并给我一个示例场景来解释这种需求?(我已经理解了什么是序列化,我只是想知道你什么时候会用到它)。
发布于 2010-03-19 14:54:16
序列化通常在需要通过网络发送数据或存储在文件中时使用。我所说的数据是指对象,而不是文本。
现在的问题是,您的网络基础设施和硬盘是能够理解位和字节的硬件组件,而不是JAVA对象。
序列化是将Java对象的值/状态转换为字节,以便通过网络发送或保存它。
这类似于语音在PSTN电话线上的传输方式。
发布于 2011-06-12 20:28:27
关于序列化的小故事
经过多年的辛勤工作,地球上的科学家开发出了一种可以帮助他们进行日常工作的机器人。但是这个机器人的特征比火星科学家开发的机器人要少。
在两个星球的科学家会面后,决定火星将他们的机器人送到地球上。但是出现了一个问题。将100个机器人送上地球的成本是1亿美元。它需要大约60天的旅行时间。
最后,火星的科学家决定与地球的科学家分享他们的秘密。这个秘密是关于类/机器人的结构的。地球上的科学家在地球上也开发了同样的结构。火星上的科学家序列化了每个机器人的数据,并将其发送到地球。地球的科学家反序列化的数据,并相应地将其输入到每个机器人中。
这一过程为他们节省了大量数据通信的时间。
其中一些机器人被用于火星上的一些防御工作。因此,他们的科学家在将数据发送到地球之前,将这些机器人的一些关键属性标记为瞬态。请注意,当对象被反序列化时,瞬态属性被设置为null (在引用的情况下)或默认值(在原始类型的情况下)。
地球科学家注意到的另一点是,火星的科学家要求他们创建一些静态变量来保存有关环境的细节。这些细节被一些机器人使用。但是火星的科学家们并没有分享这些细节。因为地球的环境和火星的环境不同。
即使知道了机器人的类结构,并且有序列化的数据,地球的科学家也不能反序列化可以使机器人工作的数据。
Exception in thread "main" java.io.InvalidClassException:
SerializeMe; local class incompatible: stream classdesc
:火星的科学家们一直在等待全额付款。一旦付款完成,火星的科学家就与地球的科学家分享了serialversionUID。地球科学家将其设置为机器人类,一切都开始工作。
更新
尽管在序列化的帮助下,他们能够使用信号而不是实际的宇宙飞船发送数据,但他们意识到发送大量数据仍然是一个挑战。序列化使得这个过程更便宜、更快,但它仍然很慢。因此,不同的科学家提出了不同的想法来减少数据大小。一些科学家建议压缩数据,一些科学家建议使用不同的机制来表示数据,以便可以将其反序列化。其中一些想法是XML,JSON,msgpack,
发布于 2010-03-19 14:49:55
当您想要将对象的状态保存到文件中或通过网络发送时,您需要将其转换为一系列字节。这称为序列化。
Java有一个内置的机制,其他选项包括XML或JSON。
需要的示例:缓存对象、进行远程方法调用、将对象图保存到磁盘。
https://stackoverflow.com/questions/2475448
复制相似问题