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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qixing0918 中级黑马   /  2013-10-31 10:16  /  829 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.序列化与反序列化是干什么的 都用哪些类处理
正常对象是保存在堆中的但你程序用完对象就结束了 但你还想用怎么办 你可以把对象持久化(就是保存在硬盘上) 处理类是ObjectInputStream与 OjbectOutputStream
2.当你序列化一个对象 但当你改变对象 就不能反序列化了
其实jvm是根据 static final long serialVersionUID = 42L; 这个字段是否相同来决定是否能反序列化的 这个字段又是系统生成的  如果你想
做到即使是改变对象也能序列化 就要自己生成serialVersionUID
3.什么属性不能序列化
static 属性不能 因为static 是方法区的 而序列化只能是堆中的数据 所以不能序列化
还有就是     ransient int age 也是不能序列化的因为有transient关键字

代码实例
  1. public class ObjectInputStream {

  2. public static void main(String[] args) throws Exception {

  3. writeObj();
  4. readerObj();

  5. }

  6. public static void writeObj() throws Exception {

  7. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:\\info.txt"));
  8. oos.writeObject(new Person("lisi", 39, "上海"));
  9. oos.close();

  10. }

  11. public static void readerObj() throws FileNotFoundException, Exception {
  12. java.io.ObjectInputStream ois = new java.io.ObjectInputStream(new FileInputStream("d:\\info.txt"));
  13. Person p = (Person) ois.readObject();
  14. System.out.println(p);
  15. ois.close();

  16. }

  17. }
复制代码
person pojo
  1. public class Person implements Serializable {

  2. public static final long serialVersionUID = 42L;// 手动生成UID根据UID来标示一个类
  3. // 当你改变person同样能序列反序列

  4. private String name;
  5. private int age;// transient int age 也是不能序列化的因为有transient关键字
  6. static String work = "北京";// 不能被序列化因为 static是放在方法区的 而对象是放在堆总的 序列化只能序列堆的对象

  7. public String getName() {
  8. return name;
  9. }

  10. public void setName(String name) {
  11. this.name = name;
  12. }

  13. public int getAge() {
  14. return age;
  15. }

  16. public void setAge(int age) {
  17. this.age = age;
  18. }

  19. public static String getWork() {
  20. return work;
  21. }

  22. public static void setWork(String work) {
  23. Person.work = work;
  24. }

  25. public static long getSerialversionuid() {
  26. return serialVersionUID;
  27. }

  28. public Person(String name, int age, String work) {
  29. this.work = work;
  30. this.name = name;
  31. this.age = age;
  32. }

  33. @Override
  34. public String toString() {
  35. return "Person [name=" + name + ", age=" + age + ",work=" + work + "]";
  36. }

  37. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马