序列化

简介: 序列化

什么是序列化

用一个 字节 序列可以表示一个对象,该 字节 序列包含该 对象的数据,对象的 类型 和 对象中存储的属性 等信息

字节 序列写出到文件之后,相当于文件中持久保存了一个对象的信息

字节 序列还可以从文件中读取回来,重构对象,对它进行 反序列化

对象的数据、 对象的类型 和 对象中 存储的数据 信息,都可以用来在内存中创建对象

序列化条件

该类必须 实现 java.io.Serializable 接口

Serializable 是一个 标记接口,不实现此接口的类将 不会使任 何状态 序列化或反序列化,会抛出 NotSerializableException

该 类 的所有属性必须是 可序列化 的。如果有一个属性不需要可序列化的,则该属性必须注明是 瞬态 的,使用 transient 关键字修饰

ObjectOutputStream类

作用

将 Java 对象的原始数据类型写出到文件,实现对象的持久存储

构造方法

public ObjectOutputStream(OutputStream out) :创建一个指定 OutputStream 的 ObjectOutputStream。 构造举例

写出对象方法

public final void writeObject (Object obj)

  • 创建 Person 类
public class Person implements Serializable {
    public String name;
    public String age;
    public transient String address;
    public void show() {
        System.out.println("myName is " + name);
    }
}
  • 写到文件当中
public static void main(String[] args) throws Exception {
    Person person = new Person();
    person.name = "xhh";
    person.age = "1";
    person.address = "上海";
    FileOutputStream fos = new FileOutputStream("person.txt");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(person);
    oos.close();
    fos.close();
}

ObjectInputStream类

作用

ObjectInputStream 反序列化流,将之前使用 ObjectOutputStream 序列化的原始数据恢复为对象

构造方法

public ObjectInputStream(InputStream in) :创建一个指定 InputStream 的 ObjectInputStream

读取对象方法

  • readObject()
public static void main(String[] args) throws Exception {
    FileInputStream fileIn = new FileInputStream("person.txt");
    ObjectInputStream in = new ObjectInputStream(fileIn);
    Person p = (Person) in.readObject();
    System.out.println(p.name);
    System.out.println(p.age);
    System.out.println(p.address);
    p.show();
    fileIn.close();
    in.close();
}

注意事项

对于 JVM 可以 反序列化 对象,它必须是能够找到 class 文件的类。

如果找不到该类的 class 文件,则抛出一个 ClassNotFoundException 异常

相关文章
|
6月前
|
存储 C#
C#中的序列化和反序列化
C#中的序列化和反序列化
|
缓存 安全 网络协议
对象的序列化与反序列化详解
对象的序列化与反序列化详解
112 0
对象的序列化与反序列化详解
|
前端开发 Shell 数据库
序列化使用
序列化使用
|
存储 Java
序列化和反序列化
序列化和反序列化
75 0
序列化与反序列化
序列化与反序列化
62 0
|
存储 安全
序列化
序列化
122 1
|
JSON IDE Java
浅谈序列化与反序列化
浅谈序列化与反序列化
浅谈序列化与反序列化
|
存储 Java 数据库
什么是序列化
问题来了,什么是序列化呢?相信很多人都不太清楚,那我就把我的理解分享给大家
126 0
|
XML 存储 JSON
详解C# 序列化和反序列化
详解C# 序列化和反序列化
193 0
详解C# 序列化和反序列化
|
Java 开发者 容器
序列化与反序列化处理|学习笔记
快速学习 序列化与反序列化处理
140 0
序列化与反序列化处理|学习笔记