对象序列化

1、对象序列化是指将内存中保存的对象以二进制数据流的形式进行处理传输,可以实现对象(在堆内存中)的保存或网络传输。

但是并不是所有的对象都可以被序列化,如果希望对象被序列化那么对象所在的类一定要实现java.io.Serializable父接口,作为序列化的标记,这个接口中没有任何方法,其描述的是一种类的能力,Java中另一个描述能力的接口是Closeable接口。

2、序列化与反序列化处理

实现序列化与反序列化操作的两个类:

序列化:public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants

            构造方法:public ObjectOutputStream​(OutputStream out) throws IOException

            实现序列化的方法:public final void writeObject​(Object obj) throws IOException

反序列化:public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants

             构造方法:public ObjectInputStream​(InputStream in) throws IOException

             实现反序列化的方法:public final Object readObject​() throws IOException,ClassNotFoundException

3、transient关键字

默认情况下当执行了对象序列化之后,会将类中的全部属性内容进行序列化,当不需要对某些属性进行实例化的时候可以在属性定义上使用transient关键字。

此时,在进行序列化处理的时候,该属性的内容是不会被保存下来的,即读取时读到的是该属性的默认值。

当类中有一些需要计算保存的属性内容往往是不需要被序列化的。开发中大部分需要被序列化的类往往都是简单java类,所以该关键字的使用频率不高。

实现序列化与反序列化:

import java.io.*;
public class RandomAccessFileDemo {
    private static final File SAVE_FILE = new File("d:" + File.separator + "a.txt") ; //操作文件
    public static void main(String[] args) throws Exception {
        // saveObject(new Person("一只瓶子a", 18)) ;
        System.out.println(loadObject()) ;
    }
    public static void saveObject(Object obj) throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(SAVE_FILE)) ; //序列化构造方法
        oos.writeObject(obj) ; //序列化实现方法
        oos.close() ;

    }
    public static Object loadObject() throws Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(SAVE_FILE)) ;
        Object obj = ois.readObject() ; //反序列化
        ois.close() ;
        return obj ;

    }
}
class Person implements Serializable {
    private String name ;
    private transient int age ;
    public Person(String name , int age) {
        this.name = name ;
        this.age = age ;
    }
    public String toString() {
        return "name:" + this.name + "-年龄:" + this.age ;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值