Java——对象序列化
1、对象序列化基本概念
对象序列化指的是将在内存中保存的对象变为二进制数据流,这样对象可以保存在文件中或进行各种传输操作。要让类对象可被序列化,需要实现java.io.Serializable接口,此接口没有方法定义,属于标识接口。
eg:定义一个可被序列化的类
class Person implements Serializable{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
}
如上,只是实现了Serializable接口,Per'son类对象就可以被传输或保存在文件中了。
2、序列化操作
依靠java.io.ObjecetOutputStream类进行对象的序列化操作,其为OutputStream的子类,
构造方法:public ObjectOutputStream(OutputStream out) throws IOException,取得ObjecetOutputStream类的实例化对象后,即可进行序列化操作。
利用输出对象方法:public final void writeObject(Object obj) throws IOException
eg:实现Person类对象的序列化
private void ser(Person person) throws Exception{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E"+ File.separator+"person.ser"));
oos.writeObject(person);
oos.close();
}
3、反序列化
利用ObjecetOutputStream输出的文件信息为二进制数据,看不懂,只能利用ObjecetInputStream类进行反序列化操作读取。其为InputStream的子类,
构造方法:public ObjectInputStream(InputStream out) throws IOException,取得ObjecetInputStream类的实例化对象后,即可进行反序列化操作。
利用方法:public final void readObject(Object obj) throws IOException
eg:实现Person类对象的反序列化
private void dser() throws Exception{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E"+ File.separator+"person.ser"));
Object obj = ois.readObject();
System.out.println(obj);
ois.close();
}
4、transient关键字
可通过transient关键字定义实现类的某些属性不实现序列化。
private transient String name;
5、总结
1)要实现类对象的序列化,只需要实现Serializable接口,几乎简单Java类都有实现此接口;
2)ObjectOutputSream、ObjectInputStream很少由用户自己操作;
3)transient可保证属性不被序列化,但是用的很少。
- CentOs6.5 修改主机名
- 基础篇章:React Native 之 View 和 Text 的讲解
- CentOs7.3 修改主机名
- 基础篇章:React Native之Flexbox的讲解(Height and Width)
- PDF.js专题
- CentOs7.3 编译安装 Nginx 1.9.9
- 基础篇章:关于 React Native 之 RefreshControl 组件的讲解
- CentOs7.3 安装 JDK1.8
- 基础篇章:关于 React Native 之 ListView 组件的讲解
- maven环境快速搭建
- CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务
- CentOs7.3 搭建 Redis-4.0.1 Cluster 集群服务
- CentOs7.3 搭建 Redis-4.0.1 单机服务
- Shodan新手入坑指南
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Backtracking - 77. Combinations
- Backtracking - 90. Subsets II
- Backtracking - 78. Subsets
- Tree - 331. Verify Preorder Serialization of a Binary Tree
- Tree - 95. Unique Binary Search Trees II
- Tree - 96. Unique Binary Search Trees
- Tree - 116. Populating Next Right Pointers in Each Node
- Tree - 297. Serialize and Deserialize Binary Tree
- 使用 shell 脚本批量创建用户详解讲解
- Tree - 230. Kth Smallest Element in a BST
- Tree - 173. Binary Search Tree Iterator
- Tree - 450. Delete Node in a BST
- Tree - 687. Longest Univalue Path
- DFS - 980. Unique Paths III
- Dynamic Programming - 375. Guess Number Higher or Lower II