序列化

简介: 序列化

什么是序列化

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

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

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

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

序列化条件

该类必须 实现 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 异常

相关文章
|
C# 图形学 Windows
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
两行代码就能实现Form窗体的(背景)透明效果,它不是Opacity属性的整个窗体透明,`TransparencyKey`实现窗体的透明、窗体中间部分镂空效果...
4468 0
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
|
11月前
|
算法
基于爬山法MPPT最大功率跟踪算法的光伏发电系统simulink建模与仿真
本课题基于爬山法MPPT算法,对光伏发电系统进行Simulink建模与仿真。使用MATLAB2022a版本,通过调整光伏电池的工作状态以实现最大功率输出。爬山法通过逐步优化工作点,确保光伏系统在不同条件下均能接近最大功率点。仿真结果显示该方法的有效性,验证了模型的正确性和可行性。
|
自然语言处理 安全 Java
java中如何实现多语言切换
java中如何实现多语言切换
829 2
|
存储 自然语言处理 Java
如何在Java中实现国际化与本地化
如何在Java中实现国际化与本地化
|
存储 API C语言
C语言Log工具推荐-easylogger
C语言Log工具推荐-easylogger
491 1
|
存储 开发框架 JSON
uni-app 73聊天类封装(八)-添加聊天记录,在移动应用开发中,聊
uni-app是跨平台移动应用开发框架,简化了聊天功能的实现。开发聊天应用涉及数据存储(如IndexedDB、SQLite、云服务)、数据结构设计、消息发送(WebSocket或HTTP接口)、消息接收与展示(组件化开发,如`<view>`、`<scroll-view>`)及消息保存。通过uni-app的组件和插件,开发者能高效实现聊天记录的完整流程。[Read more](http://colorsound.cn/post/173.html?093671)
404 0
|
Unix Linux Python
10个必会的Linux命令
10个必会的Linux命令
154 2
|
缓存 开发工具 数据安全/隐私保护
git-学习git,这一篇就足够了(初学者视角实战教程)
git-学习git,这一篇就足够了(初学者视角实战教程)
463 0
|
Arthas Java 测试技术
将线程死锁检测集成进arthas以提高定位效率
将线程死锁检测集成进arthas以提高定位效率
835 0
|
移动开发 人工智能
马尔可夫链预测举例——钢琴销售的存贮策略
马尔可夫链预测举例——钢琴销售的存贮策略
409 0