黑马程序员技术交流社区

标题: 对象序列化 [打印本页]

作者: 奋发吧小白    时间: 2014-10-9 14:28
标题: 对象序列化
对象序列化:是为了传递对象,即把对象持久化的存储,并且可以通过ObjectInputStream和ObjectOutputStream两个流来进行读取和写入。
对象序列化需要实现一个Serializable,这是为了标志该对象可以被序列化。
注意:1,对象序列化的本质是给该对象根据对象的成员计算出一个唯一的UID方便网络传输时验证是否是同一个对象。
      ,2,  UID也可以自己动手生成
      3,静态的成员不可以被序列化
     4,若是非静态的成员,不被序列化,则需要关键字transient修饰!

作者: 奋发吧小白    时间: 2014-10-9 19:38
zengming13 发表于 2014-10-9 16:41
你的说法有误,本质是为了简化对象在不同设备之间转输,我们创建的对象都是在内存中的,断电就没有了,如果 ...

嗯 可能我理解的片面了!谢谢!
作者: Captain_Jack_Sp    时间: 2014-10-9 19:52
弄上自己以前写的序列化代码吧!!!!
有病了还这么拼!!!!!!!!!
  1. package cn.io.qita;
  2. import java.util.*;
  3. import java.io.*;
  4. /*
  5. 对象序列化:
  6. 对象序列化就是给对象一个序列号,这个序列化是根据类的字段和方法所给出的号码
  7. 可以通过static final long serialVersionUID = 42L;固定序列的号码


  8. 静态的字段不能被序列化:因为静态在方法区里面,而序列化是给堆里面的序列化

  9. 如果字段既不是静态,还不想被序列化那么可以在字段前面加transient



  10. 对象反序列化:
  11. 反序列化和必需和序列化用的一样的对应方法。

  12. */

  13. class Person implements Serializable //必需继承序列化
  14. {
  15.         //对象序列化其实就是给对象个序列化  下面这样
  16.         //static final long serialVersionUID = 42L;
  17.         String name;
  18.         int age;
  19.         Person(String name,int age)
  20.         {
  21.                 this.name=name;
  22.                 this.age=age;
  23.         }
  24.         public String toString()
  25.         {
  26.                 return name+";;;;"+age;
  27.         }
  28. }
  29. public class XuLieHuaDemo
  30. {
  31.         public static void main(String[]args)throws Exception
  32.         {
  33.                 //writeObject();
  34.                 readObject();
  35.         }
  36.         public static void readObject()throws Exception        //对象反序列化
  37.         {
  38.                 ObjectInputStream ois=new ObjectInputStream(new FileInputStream("obj.txt"));
  39.                 Person p=(Person)ois.readObject();   //返回的是对象
  40.                 System.out.println(p);
  41.                 ois.close();
  42.                
  43.         }
  44.         public static void writeObject()throws IOException  //对象序列化,
  45.         {
  46.                 ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("obj.txt"));
  47.                 oos.writeObject(new Person ("aaa",23));
  48.                 oos.close();
  49.         }
  50. }

复制代码

作者: 奋发吧小白    时间: 2014-10-10 10:29
Captain_Jack_Sp 发表于 2014-10-9 19:52
弄上自己以前写的序列化代码吧!!!!
有病了还这么拼!!!!!!!!!
...

“有病了”???首先我这是正常的学习!即使被录取也有很多很多的东西需要学!不是只是为了技术分而在此的!请尊重别人!再说 学习的态度必须端正!

作者: Captain_Jack_Sp    时间: 2014-10-10 12:35
奋发吧小白 发表于 2014-10-10 10:29
“有病了”???首先我这是正常的学习!即使被录取也有很多很多的东西需要学!不是只是为了技术分而在此 ...

拜托,我说的是我生病了




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