编程语言中序列化概念的含义是什么?
当我们在类上面使用Serializable
属性时,意思是什么?
答案 0 :(得分:79)
假设您有两个在两台不同物理机器上运行的应用程序。两个应用程序都需要交换两个应用程序通常使用的数据。这些应用程序相互通信以与某些介质共享数据,这些介质可以是文件系统,tcp或udp连接或任何其他合适的网络协议,或者可以是直接的内存数据交换。这些介质中的任何一种都只能理解以一系列位形式描述的数据。因此,当一个应用程序需要将值10发送到另一个应用程序时,值10将作为其二进制表示1010发送,并且您还将传递描述1010的一些信息。该元信息也将是另一个应用程序可以的一系列位。容易理解。这很容易。
让我们举另一个例子,其中这两个应用程序需要交换更复杂的非原始数据类型。假设他们需要交换Book类型的对象,其中Book是应用程序中的自定义类,并且两个应用程序都具有Book类型的定义。
public class Book
{
Book() { }
public long BookId { get;set; }
public string Author { get;set; }
public string Title { get;set; }
}
您将如何在两个应用程序之间交换类型书的对象?为了能够在两个应用程序之间共享对象,您需要能够将Book对象转换为二进制表示。这就是序列化的结果。
在Serialization的帮助下,您可以定义如何将对象转换为其二进制表示形式。接收应用程序将执行反向过程,即反序列化,从其二进制表示构造一个Book对象。
答案 1 :(得分:20)
没有比维基百科更好的解释了。
在计算机科学中,在语境中 数据存储和传输, 序列化是一个过程 转换数据结构或对象 进入一系列位,以便它可以 存储在文件或内存缓冲区中, 或通过网络传输 连接链接“复活” 稍后在同一台或另一台计算机上 环境。
http://en.wikipedia.org/wiki/Serialization
此外,Serializable属性不能用于方法。 由属性用法
表示[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Delegate, Inherited = false)]
答案 2 :(得分:9)
序列化是将对象转换为对象的过程 字节流。反序列化是相反的过程 从字节流创建对象。
序列化/反序列化主要用于传输 对象(例如在远程处理期间)或持久对象(例如 到文件或数据库).Serialization可以定义为 将对象的状态存储到存储器的过程 介质。在此过程中,公共和私人领域 对象和类的名称,包括 包含该类的程序集,将转换为流 字节,然后写入数据流。当。。。的时候 随后对象被反序列化,一个精确的克隆 原始对象已创建。
答案 3 :(得分:1)
序列化是将数据结构或对象状态转换为可存储格式的数据的过程
答案 4 :(得分:0)
我们为什么需要序列化?
在过程语言(如Cobol或C)中,没有序列化的概念。为什么我们在OOP中使用它?让我们来学习Java。您有一个实例化多个称为Objects的类的类,并且您要通过字节定向流形式的面向消息的中间件通过网络传递这些对象状态(变量的当前值)之一,并且需要序列化和反序列化。 如果多种语言都同意这种字节流格式,那么序列化甚至可以为不兼容的系统交换数据提供一种方式。