Java中的序列化与反序列化:Serializable接口的使用

在Java中,对象可以通过序列化和反序列化来实现在网络上传输或保存到本地文件中。本文将介绍如何使用Serializable接口来实现对象的序列化和反序列化。


什么是序列化和反序列化

在Java中,序列化是指将对象转化为字节序列的过程,而反序列化则是指将字节序列再转化为对象的过程。


如何序列化和反序列化

在Java中,我们可以通过使用ObjectOutputStream和ObjectInputStream来实现对象的序列化和反序列化。其中,ObjectOutputStream可以将对象输出到输出流中,而ObjectInputStream则可以从输入流中读取对象。

在进行序列化和反序列化之前,我们需要确保对象实现了Serializable接口,这个接口只是一个标识接口,并没有具体的方法需要实现。

public class Person implements Serializable {
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

序列化一个对象

public static void serializeObject(Object obj, String filePath) throws IOException {
    FileOutputStream fos = new FileOutputStream(filePath);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(obj);
    oos.flush();
    oos.close();
    fos.close();
}

使用ObjectOutputStream的writeObject方法将对象写入到输出流中,最后关闭输出流即可。


反序列化一个对象

public static Object deserializeObject(String filePath) throws IOException, ClassNotFoundException {
    FileInputStream fis = new FileInputStream(filePath);
    ObjectInputStream ois = new ObjectInputStream(fis);
    Object obj = ois.readObject();
    ois.close();
    fis.close();
    return obj;
}

使用ObjectInputStream的readObject方法从输入流中读取对象,并将其转化为Object类型返回。


示例代码

下面是一个实现序列化和反序列化的示例代码:

public static void main(String[] args) throws IOException, ClassNotFoundException {
    Person person = new Person("Tom", 18);
    String filePath = "person.ser";
    serializeObject(person, filePath);
    Person newPerson = (Person)deserializeObject(filePath);
    System.out.println(newPerson.getName() + ":" + newPerson.getAge());
}

运行结果:

Tom:18

总结

使用Serializable接口可以方便地实现对象的序列化和反序列化,使得对象可以在网络上传输或保存到本地文件中。

猿教程
请先登录后发表评论
  • 最新评论
  • 总共0条评论