java基础之序列化(IO流)

1、对象的序列化、反序列化

1)对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化

2)序列化流(ObjectOutputStream),是过滤流------>writeObject

      反序列化流(ObjectInputStream)  ----->readObject

3)序列化接口(Serializable)

    对象必须实现序列化接口,才能进行序列化,否则将出现异常

            这个接口,没有任何方法,只有一个标准


ObjectOutputStream

	public ObjectOutputStream(OutputStream out)
        	           throws IOException
创建写入指定 OutputStream 的 ObjectOutputStream。此构造方法将序列化流部分写入底层流;调用者可以 通过立即刷新流,确保在读取头部时,用于接收 ObjectInputStreams 构造方法不会阻塞。 


public final void writeObject(Object obj)
                       throws IOException
将指定的对象写入 ObjectOutputStream。对象的类、类的签名,以及类及其所有超类型的非瞬态和非静态字段的值都将被写入。可以使用 writeObject 和 readObject 方法重写类的默认序列化。由此对象引用的对象是以可变迁的方式写入的,这样,可以通过 ObjectInputStream 重新构造这些对象的完全等价的图形。 

ObjectInputStream

public ObjectInputStream(InputStream in)
                  throws IOException
创建从指定 InputStream 读取的 ObjectInputStream。从流读取序列化头部并予以验证。在对应的 ObjectOutputStream 写入并刷新头部之前,此构造方法将阻塞。


public final Object readObject()
                        throws IOException,
                               ClassNotFoundException
从 ObjectInputStream 读取对象。对象的类、类的签名和类及所有其超类型的非瞬态和非静态字段的值都将被读取。可以使用 writeObject 和 readObject 方法为类重写默认的反序列化。由此对象引用的对象是可传递读取的,这样 readObject 即可重新构造这些对象的完全等价的图形。 


4)transient关键字修饰不能被jvm序列化和反序列化,
但可以自己完成这个元素的序列化

private void writeObject(java.io.ObjectOutputStream s)
<pre name="code" class="java">private void readObject(java.io.ObjectInputStream s)
 
 


private transient int stuage  //该元素不会进行jvm默认的序列化,也可以自己完成这个元素的序列化
private void writeObject(java.io.ObjectOutputStream s)
		        throws java.io.IOException{
		 s.defaultWriteObject();//把jvm能默认序列化的元素进行序列化操作
		 s.writeInt(stuage);//自己完成stuage的序列化
}
private void readObject(java.io.ObjectInputStream s)
		        throws java.io.IOException, ClassNotFoundException{
		  s.defaultReadObject();//把jvm能默认反序列化的元素进行反序列化操作
		  this.stuage = s.readInt();//自己完成stuage的反序列化操作
}



4) 一个类实现了序列化接口,那么其子类都可以进行序列化


对子类对象进行反序列化操作时::如果其父类没有实现序列化接口,那么其父类的构造函数会被调用




















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值