对串行化的理解

来源:互联网 发布:sql课程设计说明书模板 编辑:程序博客网 时间:2024/06/05 09:56

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

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

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


对象串行化
对象也是一种在内存中储存的数据类型,他的寿命通常会随着生成该对象的程序终止而终止
有时候可能将对象的状态保存下来,需要时再将对象恢复,对象通过写出描述自己的状态的值
来记录自己,这个过程称对象的串行化(Serialization)
以下两种情况需要将对象串行化:
对象需要在网络中传输时,将对象串行化成二进制串即可。
对象需要持久保存时,将对象串行化后写入文件或数据库。
串行化和反串行化函数:
serialize() -- 串行化,返回一个包含字节流的字符串 私有的属性不会被串行化 进行串行化可以把这个对象类
转换成字符串储存起来
例:$p1=new Person('李冰冰',160,50,18);
  //把这个对象串行化
  $str=serialize($p1)
  //将字符串写入data.txt
  file_put_contents("data.txt",$str);
unserialize() -- 反串行化,能够重新把字符串变回php原来的对象值。
例:$str=file_get_contents("data.txt");
  //将字符串中的类生成一个对象
  $p1=unserialize($str);
  //echo $p1->name;
  $p1->say();
串行化一个对象将会保存对象的所有属性变量和类名信息,但是不会保存对象的
对象串行化魔术方法
__sleep()
是执行串行化时自动调用的方法。
注意:sleep方法需要返回一个数组,其中数组中的值是需要串行化的属性名
例:function __sleep(){
    return array("串行化的属性名",...)
} 这里写哪些属性名就会串行化哪些属性
__wakeup()
是在执行反串行化时自动调用的方法,可以在反序列化时改变属性的值,即再次初始化。
输出这个对象的时候可以通过这个魔术方法来改变输出的属性值

原创粉丝点击