【发布时间】:2010-11-21 04:43:14
【问题描述】:
什么是 C# 中的可序列化对象? 我想可序列化这个词比“可序列化对象”更让我失望。
【问题讨论】:
标签: c# serializable
什么是 C# 中的可序列化对象? 我想可序列化这个词比“可序列化对象”更让我失望。
【问题讨论】:
标签: c# serializable
通常对象是随机访问,也就是说,您可以指定对象的任何部分(属性或字段)并直接访问该部分。如果您使用 RAM 来存储对象,这一切都很好,因为 RAM 是 Random Acess Memory,因此适合去工作。
当您需要将对象存储在传统上不是随机访问的介质上时,例如 disk,或者您需要通过 stream 介质传输对象(如网络),则需要将对象转换为适合相关媒体的形式。这个转换过程称为序列化,因为结构化对象被扁平化或序列化,使其更适合长期存储或通过网络传输。
为什么不直接将构成 RAM 中对象的位复制到磁盘,或者将其作为不透明的 blob 通过网络发送? ……你可能会问。几个问题:
【讨论】:
可以转换为位并存储在介质(例如硬盘驱动器)上的对象。 http://en.wikipedia.org/wiki/Serialization
【讨论】:
对象序列化存储实例的状态,以便您以后可以再次重建该实例。
在大多数(C# 和 Java)中,可序列化对象是“标记的”。在 Java 中,您需要实现 Serializable。在 C# 中,您需要使用 [Serializable]。
对象序列化后,您可以将其存储在文件中或通过网络发送。
把它想象成遍历一个实例的每个实例变量并存储它的值,用一些分隔符分隔(尽管它比这要复杂得多;想想如果你有非原始类型的实例变量会发生什么,您还必须将所有值存储在其中)。
它的一个用途是保存游戏。
【讨论】:
序列化通常意味着将对象状态保存为“可保存”格式(如保存到磁盘),以便以后可以将其反序列化为实际对象。在远程调用的情况下,通常还通过网络发送对象。如果您不想保存并且不想通过网络发送对象,则可以忽略可序列化部分(在 Java 中,您不实现可序列化接口)
【讨论】:
您可以在 C# 中将对象标记为 [serializable],这意味着它可以在 .net 中转换为二进制、SOAP、XML。
这样做的好处是您可以序列化一个对象,通过互联网、网络等发送它,然后在另一端再次将其恢复为对象。然后,这可以跨越机器边界,例如 Windows 机器到 Unix 机器,只要另一端的计算机能够读取数据并对其进行反序列化。
请看这篇文章: http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=236
【讨论】:
除了已经说过的,我认为重要的是要提到数据的序列化意味着给它一个明确定义的顺序(序列来自系列,这意味着有一些东西排列 或 排队)。
例如,将图(例如,从“语义网”中得知的 RDF 图)序列化为 XML 等序列化格式意味着必须有一个规则集来定义如何将图中包含的信息按顺序排列,以便以后可以通过应用反向序列化规则(反序列化)对其进行重构。
【讨论】:
序列化:一种将对象转换为二进制格式、简单对象访问协议(SOAP)或易于存储、传输和检索的xml文档的技术。
以简单的方式序列化方式,我们可以压缩和解压缩数据并以安全的方式跨网络传输数据。
对象序列化是 ljuwaidah 解释的。 也试试这个链接 link text
【讨论】:
由于 Java 是一个独立于平台的平台,它是为安全目的而发明的,所以所有事情都可能以比特的形式出现。例如,作为用户,我们非常了解字母,但很难记住这些字母的位,或者我们可以用那个 Java 语言字符串说。 因此,为了在网络中提供安全性,我们使用对象。 由于消息是有损耦合的,为了提供安全性,我们使用对象从服务器或客户端发送或接收消息。因此,当我们使用对象时,对象必须是可序列化的,这意味着它们必须采用机器易于理解的位形式。 特别是发送和接收消息被称为JMS(Java Message Service)。例如,在印度的一台计算机可能想与当时在美国的另一台计算机通信,使用 JMS 服务。
简而言之,序列化意味着将字符串转换为位。
通过使用它,我们可以创建Java程序,例如使用基于SMTP(简单邮件传输协议)协议的邮件应用程序来发送和接收邮件。
【讨论】: