java对象序列化


对象序列化:

对象序列化是指将一个对象转化为二进制的byte流。

存在如下情况:

将对象保存在文件上的操作称为对象的序列化。

将对象从文件中恢复称为反序列操作。

使用ObjectOutPutStream类实现对象的序列化,使用ObjectInputStream类实现反序列化。

被序列化对象所在的类必须实现java.io.Serializable接口。

对象序列化就是对象持久化的一种方法,它是将一个对象的属性和方法转化为一种序列化的格式以用于存储和传输,反序列化就是根据这些信息重建对象的过程。

不是所有的对象都能序列化

ObjectOutPutStream &&objectInputStream 的使用

实例如下:

首先创建一个类(Dog类)完成基本属性,方法。

OutputStream out = new FileOutputStream("obj.tmp");

// 根据字节输出流构造一个对象流

ObjectOutputStream  oos = new ObjectOutputStream(out);

oos.writeInt(106);

Dog d= new Dog(3,"JACK");

oos.writeObject(d);//想向文件中写入对象

System.out.println("done!!!!!!");

oos.close();

out.close();

完成此步操作,即完成了序列化的操作。对象将被存入文件。

反序列化:

ObjectInputStream  in = new ObjectInputStream(new FileInputStream("obj.tmp"));

// 读取时候必须按照存入的顺序

int num = in.readInt();

Dog d =(Dog)in.readObject();

System.out.println("num="+num+"dog"+d);

in.close();

readObject读取对象,将其强转为需要反序列化的类,此时就可以得到序列化之前的信息,完成了反序列化。

序列化一组对象:

在序列化操作中,同时序列化多个对象时,反序列化也必须按照顺序操作如果序列化一组对象可采用:对象数组的形式,因为对象数组可以向Object进行转型操作。

如下:

Dog []dogs = {new Dog(3,"JACK"),new Dog(4,"MARK"),new Dog(3,"CENDY")};

oos.writeObject(dogs);//一次性将对象数组写入

在反序类化的时候,可以将对象将其强转为对象数组,即完成反序列化过程。

Trainsient 关键字

如果用transient声明一个实例变量,当对象存储的时候,它的值不需要维持。

当持久化对象时,可能有一个特殊对象的数据成员,不需要序列化机制来保存,为了在一个特定对象的一个域上关闭序列化,可以在其前加上关键字transient,当一个对象被序列化的时候,transient型的变量值不包括在序列化的表示中 ,非transient型的变量是被包括进去的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值