A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 凝霜的枯藤 于 2014-5-26 17:41 编辑

如题:什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用?

2 个回复

倒序浏览
利用对象的序列化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
回复 使用道具 举报
什么是序列化和如何实现序列化上说的清楚,希望下面代码对你有帮助...
  1. public class ObjectOutptuStreamTest {

  2.         /**
  3.          * @param args
  4.          * 将对象存入到流中
  5.          * @throws IOException
  6.          * @throws FileNotFoundException
  7.          */
  8.         public static  void m1()throws  IOException{
  9.                 ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("c:\\1.text"));
  10.                 os.writeObject(new Personnn("zhangsasn",20));
  11.                 os.close();
  12.                 // 运行以上程序会出现java.io.NotSerializableException:某些序列话的对象不能实现
  13.                 //所以Personnn要实现Serializable接口
  14.         }
  15.         //读出来
  16.         public static void m2()throws  IOException, ClassNotFoundException{
  17.                 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("c:\\1.text"));
  18.                 //返回的是object类型的
  19.                 Personnn p = (Personnn)ois.readObject();
  20.                 System.out.print(p);
  21.         }
  22.         //public static void main(String[] args) throws  IOException, ClassNotFoundException
  23.         //可以直接写成public static void main(String[] args) throws Exception
  24.         public static void main(String[] args) throws  IOException, ClassNotFoundException {
  25.                 // TODO Auto-generated method stub
  26.                 m2();
  27.         }

  28. }
  29. class Personnn implements Serializable{
  30.         /**
  31.          * serialVersionUID = 1L;通常是给编译器用的,因为一个类产生对象以后,固定存在以后,类可以改变
  32.          * 在重新编译的时候会产生一个新的序列号,根据ID好来判断这个对象和这个类他两个是不是用同一个序列号产生的   
  33.          * ID就是给类固定一个标志。新的类还可以去操作曾经被序列化的对象
  34.          *
  35.          */
  36.         private static final long serialVersionUID = 1L;

  37.         String name;
  38.        
  39.         int age;
  40.         //对非晶态的成员不像序列话可以写成
  41.         //transient int age;
  42.         Personnn(String name, int age){
  43.                 this.name = name;
  44.                 this.age = age;
  45.         }
  46.         public String toString(){
  47.                 return name+"..."+age;
  48.         }
  49. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马