当前位置: 首页 > news >正文

序列化笔记

第三章 序列化

3.1 概述

Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据对象的类型对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。

反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化对象的数据对象的类型对象中存储的数据信息,都可以用来在内存中创建对象。

3.2 ObjectOutputStream类

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

构造方法

  • public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream。

构造举例,代码如下:

FileOutputStream fileOut = new FileOutputStream("employee.txt");
ObjectOutputStream out = new ObjectOutputStream(fileOut);

序列化操作

  1. 一个对象要想序列化,必须满足两个条件:
  • 该类必须实现java.io.Serializable 接口,Serializable 是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出NotSerializableException
  • 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用transient 关键字修饰。
public class Employee implements java.io.Serializable {public String name;public String address;public transient int age; // transient瞬态修饰成员,不会被序列化public void addressCheck() {System.out.println("Address  check : " + name + " -- " + address);}
}

2.写出对象方法

  • public final void writeObject (Object obj) : 将指定的对象写出。
public class SerializeDemo{public static void main(String [] args)   {Employee e = new Employee();e.name = "zhangsan";e.address = "beiqinglu";e.age = 20; try {// 创建序列化流对象ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.txt"));// 写出对象out.writeObject(e);// 释放资源out.close();fileOut.close();System.out.println("Serialized data is saved"); // 姓名,地址被序列化,年龄没有被序列化。} catch(IOException i)   {i.printStackTrace();}}
}
输出结果:
Serialized data is saved
http://www.lryc.cn/news/319431.html

相关文章:

  • ArkTs的资源Resource类型怎么转为string
  • Apache zookeeper kafka 开启SASL安全认证
  • Rust 的 inline 内联编译策略
  • 软考73-上午题-【面向对象技术2-UML】-UML中的图4
  • html编辑器
  • 利用“定时执行专家”软件的25种任务与12种触发器,提升IT系统管理自动化水平
  • 设计模式学习笔记 - 规范与重构 - 8.实践:程序出错返回啥?NULL、异常、错误吗、空对象?重构ID生成器,处理各函数的异常
  • 【Python使用】python高级进阶知识md总结第4篇:静态Web服务器-命令行启动动态绑定端口号,html 的介绍【附代码文档】
  • langchain+chatglm3+BGE+Faiss Linux环境安装依赖
  • Kubernetes kafka系列 | k8s部署kafka+zookeepe集群(可外部通信)
  • IDEA创建Sping项目只能勾选17和21,没有Java8?
  • ChatGPT 遇到对手:Anthropic Claude 语言模型的崛起
  • 【LeetCode热题100】148. 排序链表(链表)
  • Ubuntu Linux - Primavera P6 EPPM 安装及分享
  • 微信小程序开发学习笔记——3.11完成form评论案例的实现逻辑
  • Linux/Ubuntu/Debian控制台启动的程序和terminal分离的方法-正在运行怎么关闭窗口
  • Lua-Lua与C的交互3
  • TensorFlow的介绍和简单案例
  • 基于Java+SpringMVC+vue+element实现前后端分离校园失物招领系统详细设计
  • 【Stable Diffusion】入门-04:不同模型分类+代表作品+常用下载网站+使用技巧
  • vue3之带参数的动态路由
  • 深入探讨GPT系列与其他NLP架构的流行度差异及其应用解析
  • 实现兼容性良好的前端页面开发
  • Rust学习02:推荐一本入门书,免费的
  • npm run dev命令的执行顺序和原理
  • C# SM2加解密 ——国密SM2算法
  • 【Machine Learning】Suitable Learning Rate in Machine Learning
  • 力扣每日一题 矩阵中移动的最大次数 DP
  • 计算机网络 |内网穿透
  • 爬虫学习 Scrapy中间件代理UA随机selenium使用