Java序列化

2019-04-17  本文已影响0人  lixinxin

一、 持久化的简单介绍:

“持久化”意味着对象的“生存时间”并不取决于程序是否正在执行——它存在或“生存”于程序的每一次调用之间。通过序列化一个对象,将其写入磁盘,以后在程序再次调用时重新恢复那个对象,就能圆满实现一种“持久”效果。

二、 语言里增加了对象序列化的概念后,可提供对两种主要特性的支持:

远程方法调用(RMI)使本来存在于其他机器的对象可以表现出好象就在本地机器上的行为。将消息发给远程对象时,需要通过对象序列化来传输参数和返回值。
使用一个Java Bean 时,它的状态信息通常在设计期间配置好。程序启动以后,这种状态信息必须保存下来,以便程序启动以后恢复;具体工作由对象序列化完成。

三、 Serializable的一些说明:

对象的序列化处理非常简单,只需对象实现了Serializable 接口即可(该接口仅是一个标记,没有方法)
序列化的对象包括基本数据类型,所有集合类以及其他许多东西,还有Class 对象
对象序列化不仅保存了对象的“全景图”,而且能追踪对象内包含的所有句柄并保存那些对象;接着又能对每个对象内包含的句柄进行追踪
使用transient关键字修饰的的变量,在序列化对象的过程中,该属性不会被序列化。

四、 序列化的步骤:

首先要创建某些OutputStream对象:OutputStream outputStream = new FileOutputStream("output.txt")
将其封装到ObjectOutputStream对象内:ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
此后只需调用writeObject()即可完成对象的序列化,并将其发送给OutputStream:objectOutputStream.writeObject(Object);
最后不要忘记关闭资源:objectOutputStream.close(), outputStream .close();

五、 反序列化的步骤:

首先要创建某些OutputStream对象:InputStream inputStream= new FileInputStream("output.txt")
将其封装到ObjectInputStream对象内:ObjectInputStream objectInputStream= new ObjectInputStream(inputStream);
此后只需调用readObject()即可完成对象的反序列化:objectInputStream.readObject();
最后不要忘记关闭资源:objectInputStream.close(),inputStream.close();

六 、 Demo

import java.io.Serializable;

public class Android implements Serializable {
    private static final long serialVersionUID = 1L;

    private String username;
    private String password;
    private transient String type;


    public Android (String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

// Externalizable的序列化对象
public static void writeExternalizableObject() {
    Android android = new Android ("huhx", 22);
    try {
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("Externalizable.txt"));
        objectOutputStream.writeObject(android );
        objectOutputStream.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

// 反序列化对象
public static void readExternalizableObject() {
    try {
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("Externalizable.txt"));
        Android android = (Android) objectInputStream.readObject();
        objectInputStream.close();
        System.out.println("name: " + android .getUser() + ", age: " + android .getAge());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

上一篇 下一篇

猜你喜欢

热点阅读