Java——对象序列化

时间:2022-07-25
本文章向大家介绍Java——对象序列化,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、对象序列化基本概念

对象序列化指的是将在内存中保存的对象变为二进制数据流,这样对象可以保存在文件中或进行各种传输操作。要让类对象可被序列化,需要实现java.io.Serializable接口,此接口没有方法定义,属于标识接口。

eg:定义一个可被序列化的类

class Person implements Serializable{

        private String name;
        private int age;

        public Person(String name,int age){
            this.name = name;
            this.age = age;
        }
    }

如上,只是实现了Serializable接口,Per'son类对象就可以被传输或保存在文件中了。

2、序列化操作

依靠java.io.ObjecetOutputStream类进行对象的序列化操作,其为OutputStream的子类,

构造方法:public ObjectOutputStream(OutputStream out) throws IOException,取得ObjecetOutputStream类的实例化对象后,即可进行序列化操作。

利用输出对象方法:public final void writeObject(Object obj) throws IOException

eg:实现Person类对象的序列化

    private void ser(Person person) throws Exception{
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E"+ File.separator+"person.ser"));
        oos.writeObject(person);
        oos.close();
    }

3、反序列化

利用ObjecetOutputStream输出的文件信息为二进制数据,看不懂,只能利用ObjecetInputStream类进行反序列化操作读取。其为InputStream的子类,

构造方法:public ObjectInputStream(InputStream out) throws IOException,取得ObjecetInputStream类的实例化对象后,即可进行反序列化操作。

利用方法:public final void readObject(Object obj) throws IOException

eg:实现Person类对象的反序列化

    private void dser() throws Exception{
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E"+ File.separator+"person.ser"));
        Object obj = ois.readObject();
        System.out.println(obj);
        ois.close();
    }

4、transient关键字

可通过transient关键字定义实现类的某些属性不实现序列化。

private transient String name;

5、总结

1)要实现类对象的序列化,只需要实现Serializable接口,几乎简单Java类都有实现此接口;

2)ObjectOutputSream、ObjectInputStream很少由用户自己操作;

3)transient可保证属性不被序列化,但是用的很少。