什么是可序列化的对象?

时间:2009-08-20 04:31:11

标签: c# serializable

C#中的可序列化对象是什么? 我猜serializable一词比“序列化对象”更让我失望。

9 个答案:

答案 0 :(得分:27)

通常,对象是随机访问,也就是说,您可以指定对象的任何部分(属性或字段)并直接访问该部分。如果您使用RAM来存储对象,这一切都很好,因为RAM R andom A cess M emory因此适用工作。

当您需要将对象存储在传统上不是随机访问的介质上时,例如 disk ,或者您需要通过 stream 介质传输对象(例如网络)然后需要将对象转换成适合于相关介质的形式。此转换过程称为序列化,因为结构化对象是扁平化或序列化的,因此更适合长期存储或通过网络传输。

为什么不将包含RAM中对象的位复制到磁盘,或者通过网络将其作为不透明blob发送? ......你可能会问。一些问题:

  1. 对象存储在内存中的格式通常是专有的,因此不适合公共使用 - 它存储在内存中的方式针对内存使用进行了优化。
  2. 当对象引用其他对象时,这些引用仅在正在运行的应用程序的上下文中具有意义。除非在序列化过程中,对象图被相应地走动和序列化,否则不可能有意义地反序列化对象。可能需要将这些引用转换为在应用程序实例的上下文之外具有含义的表单
  3. 异构系统之间可能存在互操作要求,在这种情况下,需要一种表示对象的标准方法(通常选择某种形式的XML)。

答案 1 :(得分:6)

可以转换为位并存储在介质(如硬盘驱动器)上的对象。 http://en.wikipedia.org/wiki/Serialization

答案 2 :(得分:3)

对象序列化是存储实例的状态,因此您可以稍后重新构建该实例。

在大多数(C#和Java)中,可序列化对象被“标记”。在Java中,您需要实现Serializable。在C#中,您需要使用[Serializable]。

对象序列化后,您可以将其存储在文件中或通过网络发送。

把它想象成遍历一个实例的每个实例变量并存储它的值,用一些分隔符分隔(虽然它比那个更复杂;想想如果你有非基本类型的实例变量会发生什么,你也必须把所有的价值都存储在那些里面。)

使用它就可以节省游戏费用。

答案 3 :(得分:1)

您可以在C#中将对象标记为[serializable],这意味着它无论如何都可以在.net中转换为二进制,SOAP,XML。

这样做的好处在于,您可以序列化一个对象,通过互联网,网络等发送它,然后再将它作为对象再次在另一侧恢复。这可以跨越机器边界,例如Windows机器到Unix机器,只要另一侧的计算机能够读取数据并对其进行反序列化。

看到这篇文章: http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=236

答案 4 :(得分:1)

答案 5 :(得分:1)

序列化通常意味着将对象状态保存为“可保存”格式(如保存到磁盘),以便以后可以将其反序列化为实际对象。通常在远程呼叫的情况下通过网络发送对象。如果您不想要保存,并且如果您不想通过线路发送对象,则可以忽略可序列化部分(在Java中,您不实现Serializable接口)

答案 6 :(得分:1)

序列化:它是一种将对象转换为二进制格式,简单对象访问协议(SOAP)或可以轻松存储,传输和检索的xml文档的技术。

以简单的方式序列化方式,我们可以压缩和解压缩数据,并以安全的方式跨网络传输数据。

对象序列化是ljuwaidah解释的。 也尝试这个链接 link text

答案 7 :(得分:1)

除了已经说过的内容之外,我认为重要的是要提到数据的序列化意味着给它定义明确的顺序(序列来自系列,这意味着有一些排队排成一行)。

例如,将图形(例如,从“语义网”中已知的RDF图)序列化为XML等序列化格式意味着必须有一个规则集定义如何将图中包含的信息放入订单中,以便以后可以通过应用反向序列化规则(反序列化)重建它。

答案 8 :(得分:0)

由于Java是一个独立的平台,它是出于安全目的而发明的,所以所有的东西都可以以bit的形式出现。例如,我们作为用户非常理解字母表但是很难记住那些字母表的位或者我们可以在那个Java语言字符串中说出来。 因此,为了在网络中提供安全性,我们使用对象。 由于消息是有损耦合的,为了提供安全性,我们使用对象从服务器或客户端发送或接收消息。因此,当我们使用对象时,对象必须是可序列化的,这意味着它们必须是可以被机器容易理解的位形式。 特别是发送和接收消息被称为JMS(Java消息服务)被使用。例如,印度的一台计算机可能希望与当时在美国的另一台计算机通信,使用JMS服务。

简而言之,序列化意味着将字符串转换为位。

通过使用它,我们可以创建Java程序,例如发送邮件和接收,就像使用基于SMTP(简单邮件传输协议)协议的邮件应用程序一样。