java—对象流

                                             对象流


       有的时候我们可能需要将内存中的对象持久化到硬盘上,或者将硬盘中的对象信息读到内存、中,这个时候我们需要使用对象输入输出流。
       
      序列化:是对象转换成一个字节序列的过程,是一个写操作(ObjectInputStream)
   反序列化:一个字节序列转换成对象的过程,是一个读操作(ObjectOutputStream)

 
 ObjectOutputStream  


 构造器
     ObjectOutputStream(OutputStream out) --------- 创建一个指定字节输出流的对象输出流对象。 
   
 常用方法:除了提供一些基本数据类型的写方法外,还提供了
     void writeObject(Object obj)-------将内存中的对象持久化到硬盘上 

             
ObjectInputStream  


 构造器
     ObjectInputStream(InputStream out)-----------创建一个指定字节输入流的对象输入流对象。 
   
常用方法:除了提供一些基本数据类型的写方法外,还提供了
     void readObject(Object obj)----从硬盘上读取一个字节序列,转换成对象

 

Serializable:序列化接口


         如果想将对象序列化,那么对象的类型必须实现此接口。此接口内什么都没有,只是一个序列化标识。

 

String中提供了serialVersionUID常量:


     作用:每个能序列化的对象,在被序列化时,系统会默认给此对象的类提供序列化版本号。
               不同的平台默认提供的序列化版本号多数情况下不会相同。因此,当我们反序列化
               时,如果硬盘里存储的对象的版本号与当前设计的类型的版本号不一致,会出现运行
               时异常:java.io.InvalidClassException
               这种情况称为不兼容问题
               
               如果我们想解决不兼容问题。我们应该手动提供版本号。尽可能的相同,这样来解决
               不兼容问题。
               
               另外一种情况:
                   序列化过后,可能会修改类型,如果使用默认提供的版本号,在反序列化
                   时,会出现异常;如果手动提供版本号,不出现异常,多出来的成员变量
                   以类型的默认值的形式,赋值给反序列化的对象。
transient:成员变量的一个修饰词,可以理解为瘦身。
      有的时候在序列化对象时,我们不需要将对象的某些成员变量的值持久化到硬盘上,(因为不重要),此时,我们可以在这些成员变量前添加修饰词transient。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值