Java序列化学习笔记

2018-07-24  本文已影响9人  二枚目

序列化概念

首先弄清楚序列化是什么,官方解释:把对象转换为字节序列的过程。简单地说就是将对象导出成文件。反序列化相反。
它能做什么:可以把内存中的对象状态保存到一个文件中或者数据库;实现在网络上传送对象的字节序列;
如何做:实现Serializable接口。

序列化步骤

对象序列化包括如下步骤:
1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;
2) 通过对象输出流的writeObject()方法写对象。

对象反序列化的步骤如下:
1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;
2) 通过对象输入流的readObject()方法读取对象。

序列化实例

定义一个User类,并让它实现Serializable接口。

private int uid;
private String username;
private String password;
getters and setters......

在写User类的时候,会看到这样一条警告:The serializable class User does not declare a static final serialVersionUID field of type long.即需要一个​序​列​化​的​版​本​号,Eclipse自动生成serialVersionUID的方法有两种"add default serial version ID"和"add generated serial version ID",两种都可以,只要保证在同一个类中,不同版本根据兼容需要,是否更改serialVersionUid即可。

序列化和反序列化User类对象

spublic static void main(String[] args) throws Exception {
    //创建一个User对象并序列化
    User user = new User(1001, "admin", "123456");
    SerializeUser(user);
    //将文件反序列化成User对象
    User user2 = DeserializeUser();
    System.out.println(user2.toString());
}
private static void SerializeUser(User user) throws IOException {
    // ObjectOutputStream 对象输出流,将对象存储到E盘的txt文件中,完成对user对象的序列化操作 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( new File("E:/user.txt")));
    oos.writeObject(user);
    System.out.println("user对象序列化成功......");
    oos.close();
}
private static User DeserializeUser() throws Exception, IOException {
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream( new File("E:/user.txt")));
    User user = (User) ois.readObject();
    System.out.println("文件反序列化成功......");
    return user;
}

运行结果,的控制台输出如下:

发现E盘下新增user.txt文件,总结一下:序列化一个对象,首先要创建OutputStream对象,然后将其封装在一个ObjectOutputStream对象内。调用writeObject()即可将对象序列化,并将其发送给OutputStream。要将一个序列重组为一个对象,需要将一个InputStream封装在ObjectInputStream内,然后调用readObject()。

上一篇 下一篇

猜你喜欢

热点阅读