串行化

定义
 串行化(Serialization)是计算机科学中的一个概念,它是指将对象存储到介质(如文件、内在缓冲区等)中或是以二进制方式通过网络传输。之后可以通过反串行化从这些连续的字节(byte)数据重新构建一个与原始对象状态相同的对象,因此在特定情况下也可以说是得到一个副本,但并不是所有情况都这样。

特性
  串行化有以下但不局限于这些优点:
  1.串行化是一种更好地使用类持久化的方法
  2.可用于远程方法调用,如SOAP
  3.一种分布对象的方法,特别是在软件组件中,如COM、CORBA等
  4.在随时间变化的数据(time-varying data)检测改变
  由于这些特性都是十分有用的,所以必须维持串行化的体系结构独立性。例如在一台运行在不同硬件构架上的计算机应该能够可靠地重新构建数据而不关心其对字节(byte)数据的编排方式(endianness)。

影响(Consequences)
  但是,由于串行化可能将暴露私有实现细节从而打破了抽象数据结构的不透明性。为了不让竞争对手做出兼容的产品,很多私有软件开发商都是将其程序的串行化格式作为机密的,因此他们可能故意混淆或加密其串行化的数据。
  尽管如此,现在的协作要求能够相互识别其串行化的数据。因此像CORBA这样的远程方法调用的架构会详细定义其串行化的格式以及提供相应的方法在重新构建对象时检查数据的一致性。

编程语言支持
  很多面向对象的语言都提供对串行化支持,无论是通过语法糖(Syntactic sugar)还是通过定义标准的接口来实现。

.NET Framework
  微软提供的串行化是用于对对象进行文件I/O的一种机制,该机制在框架(Frame)/文档(Document)/视图(View) 模式中得到了很好的应用。
  串行化可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据。
  对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性(persistence)。对象通过写出描述自己状态的数值来「记录自己」,这个过程叫对象的串行化(Serialization)。

Java
Java提供了自动串行化的机制,被串行化的类必须是实现java.io.Serializable接口。下面是一个简单示例:
  import java.io.*;
  public class Cat implements Serializable {
   private String name;
   public Cat () {
   this.name = "new cat";
   }
   public String getName() {
   return this.name;
   }
   public void setName(String name) {
   this.name = name;
   }
  public static void main(String[] args) {
  
   Cat cat = new Cat();
   try {
   FileOutputStream fos = new FileOutputStream("catDemo.out");
   ObjectOutputStream oos = new ObjectOutputStream(fos);
   System.out.println(" 1> " + cat.getName());
   cat.setName("My Cat");
  
   oos.writeObject(cat);
   oos.close();
  
   } catch (Exception ex) {
   ex.printStackTrace();
   }
   try {
   FileInputStream fis = new FileInputStream("catDemo.out");
   ObjectInputStream ois = new ObjectInputStream(fis);
   cat = (Cat) ois.readObject();
  
   System.out.println(" 2> " + cat.getName());
   ois.close();
   } catch (Exception ex) {
   ex.printStackTrace();
   }
   }
  }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值