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可保证属性不被序列化,但是用的很少。

发布了86 篇原创文章 · 获赞 53 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/w464960660/article/details/104618537