黑马程序员技术交流社区

标题: 什么是java序列化,如何实现java序列化? [打印本页]

作者: 崔仁军    时间: 2012-4-25 21:24
标题: 什么是java序列化,如何实现java序列化?
什么是java序列化,如何实现java序列化?
作者: 周四川    时间: 2012-4-25 21:30
Java序列化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。用途:利用对象的串行化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。


作者: 王勃    时间: 2012-4-25 21:33
通俗的说:序列化就是将一个对象的状态(各个属性量)保存起来,之后呢你要是用的话就再获取就ok了。
序列化将数据分解成字节流,以便存储在文件中或在网络上传输。还有一个概念叫反序列化,反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,
有时还要恢复数据。恢复数据要求有恢复数据的对象实例 。
还有,如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象的临时数据。

对象序列化可以实现分布式对象。主要应用例如:RMI(远程方法调用)要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。
java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。

作者: 赵嘉男    时间: 2012-4-25 21:38
给你个例子,一看就明白了
想把Person类里的name和age都序列化
import java.io.Serializable;

public class Person implements Serializable { //本类可以序列化
private String name ;
private int age ;

public Person(String name,int age){
  this.name = name ;
  this.age = age ;
}
public String toString(){
  return "姓名:" + this.name + ",年龄" + this.age ;
}
}

然后:我们将name和age序列化(也就是把这2个对象转为二进制,统族理解为“打碎”)
package org.lxh.SerDemo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream ;

public class ObjectOutputStreamDemo {  //序列化

public static void main(String[] args) throws Exception {
//序列化后生成指定文件路径
  File file = new File("D:" + File.separator + "person.ser") ;            ObjectOutputStream oos = null ;
//装饰流(流)
  oos = new ObjectOutputStream(new FileOutputStream(file)) ;
//实例化类
  Person per = new Person("张三",30) ;      oos.writeObject(per) ;//把类对象序列化
  oos.close() ;
}
}
作者: 王德南    时间: 2012-4-25 21:40
序列化是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。


作者: 何万县    时间: 2012-4-25 21:42
其实就是实现Serializable接口
作者: 金超    时间: 2012-4-25 21:43
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

   序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2