Serialization 对象序列化的实际用途?

Serialization 对象序列化的实际用途?,serialization,programming-languages,Serialization,Programming Languages,您在使用对象序列化方面做过多少软件项目?我个人从未遇到过使用对象序列化的场景。我能想到的一个用例是,服务器软件将对象存储到磁盘以节省内存。是否有其他类型的软件需要对象序列化,或者说对象序列化优于数据库?我在很多项目中都使用过对象序列化。有时,我们使用它在本地存储特定于计算机的设置。我还使用XML序列化来简化XML文档的交互和生成。它在通信协议中也非常有用。一端序列化,另一端重新充气。您可以将db和序列化结合使用。f、 前。当您必须将具有许多属性(通常是动态的,即一个对象属性集与另一个不同)的对象

您在使用对象序列化方面做过多少软件项目?我个人从未遇到过使用对象序列化的场景。我能想到的一个用例是,服务器软件将对象存储到磁盘以节省内存。是否有其他类型的软件需要对象序列化,或者说对象序列化优于数据库?

我在很多项目中都使用过对象序列化。有时,我们使用它在本地存储特定于计算机的设置。我还使用XML序列化来简化XML文档的交互和生成。它在通信协议中也非常有用。一端序列化,另一端重新充气。

您可以将db和序列化结合使用。f、 前。当您必须将具有许多属性(通常是动态的,即一个对象属性集与另一个不同)的对象存储到关系数据库中,并且您不想为每个属性创建一个新列时,我正在使用序列化通过TCP套接字传递对象。您将XmlSerializer放在任一侧,它将您的数据解析为随时可用的对象。如果您做一些基础工作,就可以得到它,这样您基本上可以来回传递对象,这使得套接字通信非常容易,只需
socket.Send(myObject)

我们从一个系统开始,该系统每15分钟左右将数千个内存对象序列化到磁盘。当这开始花费太长时间时,我们切换到混合模式,将对象保存到关系数据库和pickle文件中(顺便说一句,这是一个python系统)。最终,大部分数据存储在关系数据库中。有趣的是,系统的编写方式使得所有的应用程序代码都不关心下面发生了什么。这一切都是使用XP和数千个自动化测试完成的。

好吧,将对象转换为XML或JSON是一种在web上非常常见的序列化形式。我还参与过一个项目,在该项目中,对象在一个应用程序中创建并序列化为二进制文件,然后导入到另一个自定义应用程序中(尽管这很脆弱,因为它使用C#,而序列化在过去的.NET framework版本之间已经中断)。此外,具有复杂结构的应用程序设置可能有助于序列化。我还认为远程处理API使用序列化进行通信。基本上,序列化通常只是存储对象状态的一种方式,它有许多不同的用途。

以下是我能想到的几种用途:

  • 跨网络发送对象,最常见的示例是跨集群序列化对象
  • 序列化对象以进行(某种)缓存,即将状态保存在文件中,稍后再读取
  • 将被动/海量数据序列化到文件中,以最小化内存消耗,并在需要时将其读回

  • 当用户调用Save命令时,基于文档的应用程序(如字处理器和矢量图形编辑器)通常会将文档模型序列化到磁盘。在这些应用程序中,序列化通常比复杂数据库更受欢迎。

    使用序列化可以在每次需要实现导入/导出功能时节省时间

    每次需要导出系统数据、创建备份或存储某种设置时,可以使用序列化,只保存表示实际配置、数据或其他任何内容的对象的状态

    只有当您需要导出/导入数据的特定格式时,才有必要构建自定义解析器和导出器/导入器


    序列化也是变更证明。无论何时更改exchange功能中涉及的对象的格式,它都是可自动导出的,并且您不必更改导出/导入部件背后的逻辑。

    进程间通信是一个大问题。

    我们将其用于备份和更新功能。基本上,备份的是序列化的hibernate对象,然后通过更新更改DB模式,我们提供了一个帮助器类,将旧对象“转换”为新的DB模式。这样,我们就有了一个非常可靠的更新机制,它不会轻易中断,同时会进行自动备份。

    我在一个项目中大量使用了XML序列化。该技术用于持久化到没有公共结构的数据库数据结构,因此无法直接存储数据。我还使用序列化来分离可以在运行时更改的应用程序设置。

    是的,这似乎是一个对象序列化必不可少的场景。类似地,当EJB容器向远程客户端提供对象时,就会发生序列化。很多cookie数据都是序列化的。JSON是另一种序列化协议。序列化只是代码中的更改证明。应当指出,由此产生的数据非常脆弱。