19

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

4

8 回答 8

30

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

当您需要将对象存储在传统上不是随机访问的介质上时,例如磁盘,或者您需要通过媒体(例如网络)传输对象,则需要将对象转换为以下形式适用于相关媒体。这种转换过程称为序列化,因为结构化对象被扁平化或序列化,使其更适合长期存储或通过网络传输。

为什么不直接将构成 RAM 中对象的位复制到磁盘,或者将其作为不透明的 blob 通过网络发送?……你可能会问。几个问题:

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

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

于 2009-08-20T04:32:49.493 回答
3

对象序列化存储实例的状态,以便您以后可以再次重建该实例。

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

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

把它想象成遍历一个实例的每个实例变量并存储它的值,用一些分隔符分隔(尽管它比这要复杂得多;想想如果你有非原始类型的实例变量会发生什么,你就是也必须将所有值存储在其中)。

它的一个用途是保存游戏。

于 2009-08-20T06:42:09.357 回答
1

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

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

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

于 2009-08-20T04:33:01.833 回答
1

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

于 2009-08-20T04:34:59.397 回答
1

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

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

对象序列化是 ljuwaidah 解释的。试试这个链接也 链接文本

于 2009-08-20T07:31:04.000 回答
1

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

例如,将一个图(例如,从“语义网”中得知的 RDF 图)序列化为诸如 XML 之类的序列化格式意味着必须有一个规则集来定义如何将图中包含的信息按顺序排列,以便稍后可以通过应用反向序列化规则(反序列化它)来重建它。

于 2009-08-20T07:39:03.830 回答
0

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

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

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

于 2017-03-16T19:21:18.013 回答