对象序列化ObjectInputStream、ObjectOutputStream

对象序列化ObjectInputStream、ObjectOutputStream

 

(被操作的对象需要实现Serializable(标记接口))

【1】当将数据封装成对象时,对象会随着程序的结束,就会被清空

【2】如果将堆内存的对象序列化存储在硬盘上,那么对象的数据也会存储在硬盘上,即便程序结束了该数据依然存在(对象的持久化存储)

ObjectOutputStream 序列化  

ObjectInputStream反序列化

public class ObjectStreamDame {

  public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {

  writeobj();

  reaadobj();

 }

  public static void writeobj() throws FileNotFoundException, IOException {

  //注意一般输出的文件格式 不使用txt,容易被打开,可以使用.object

  ObjectOutputStream oos=

   new ObjectOutputStream(new FileOutputStream("obj.txt"));

   oos.writeObject(new Person("list",19));

   oos.close();

  }

  public static void reaadobj() throws FileNotFoundException, IOException, ClassNotFoundException {

  ObjectInputStream ois=

   new ObjectInputStream(new FileInputStream("obj.txt"));

  //读取序列化对象数据需要强转

  Person p=(Person)ois.readObject();

  System.out.println(p);

  ois.close();

  }

}

//实现Serializable给类标记为可序列化

class Person implements Serializable{

//1serialVersionUID序列号是根据类中的成员具备的数字标识算出来

//2序列化对象存储后java会自动生成序列号,当读取对象数据也是根据序列号读取

//3一但对象的成员有任何的更就会生成java会自动生成新的序列号,就无法读取

//4最好是自定义serialVersionUID的序列号,保证唯一性

//5注意静态的成员(在方法区内)不能被序列化,只能序列化堆内存的数据

//6用transient修饰非静态成员,那么该成员就不能被序列化

public static final long serialVersionUID = 42L;

private String name;

private int age;

transient int count;

Person(String name,int age){

this.name=name;

this.age=age;

}

public String toString() {

return name+"::"+age;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值