java-ObjectStream初步认识

import java.io.*;
class ObjectStreamDemo
{
 public static void main(String[] args) throws Exception, IOException, ClassNotFoundException
 {
  setObjectStream();
  getObjSetStream();
 }
 public static void setObjectStream() throws IOException
 {
  ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));

  oos.writeObject(new Person("zhangsan", 20));  //对象的本地持久化存贮.将对象记录到文件,需要用ObjectInpuStream来读取.
  oos.writeObject(new Person("lisi", 30));
  oos.writeObject(new Person("wangwu", 25));

  oos.close();
 }

 public static void getObjSetStream() throws Exception, IOException, ClassNotFoundException
 {
  ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));  //修改Person类后,读取的还是老文件,现在Person.class对应同一个UID值,现在也可以读取数据.

  Person p1 = (Person)ois.readObject();
  Person p2 = (Person)ois.readObject();
  Person p3 = (Person)ois.readObject();

  System.out.println(p1.toString());
  System.out.println(p2.toString());
  System.out.println(p3.toString());
 }
}

class Person implements Serializable  //标记接口,类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
        //对象进行了修改,则其对应的UID变化,记录到新文件(obj1.txt),如果读取的还是记录老版本对修改象的文件(obj.txt),就会抛出异常:
         //Exception in thread "main" java.io.InvalidClassException: Person; local class in
         //compatible: stream classdesc serialVersionUID = 4491012183083119912, local class
          //serialVersionUID = 4802475284912361980
          //两次的类文件.class的serialVersionUID不一致,这时候,需要我们手动指定serialVersionUID的值.
 public static final long serialVersionUID = 42L;  //自定义serialVersionUID,修改类时,读老版本文件可以读出.
 //什么时候定义该UID号?如果类的修改不大,为了避免运行时抛出异常,就需要定义自己的UID号,使得不同版本的类文件指向同一个ID.

 //不需要进行存贮的字段,需要用static、transient修饰.
 private transient String name;  //transient - 瞬态
 private int age;
    private int num;   //修改的部分.   

 Person(String name, int age)
 {
  this.name = name;
  this.age = age;
 }

 public String toString()
 {
  return "name=" + name + ", age=" + age;
 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值