1.转换流
待补充
2.序列化流
2.1 概述
(1)什么是序列化和反序列化?
- 序列化:把对象转化为字节序列的过程
- Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据 、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。
- 反序列化:把字节序列恢复为对象的过程
- 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。对象的数据 、对象的类型和对象中存储的数据信息,都可以用来在内存中创建对象。
图解:
图1:
图2:
- 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘中,或通过网络将这种二进制流传输到另一个网络节点,当其它程序获取了这种二进制流,就可以恢复成原来的Java对象
- Java中使用ObjectOutputStream进行序列化,使用ObjectInputStream进行反序列化,
- 序列化的好处在于可将任何实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可被还原
(2)为什么要序列化?
- 1.持久存储对象数据的时候时需要序列化。通常当我们要把对象的数据保存在文件或者数据库中时,需要序列化
- 2.在网络传输传输对象的时候需要序列化
- 3.序列化是RMI(Remote Method Invoke,即远程方法调用)过程的参数和返回值都必须实现的机制,而RMI是JavaEE的基础。因此序列化机制是JavaEE平台的基础
2.2 ObjectOutputStream类(序列化流)
java.io.ObjectOutputStream 类作用:把对象以流的方式写入到文件中实现保存
构造方法:
- 参数OutputStream out:字节输出流
特有的成员方法:
使用步骤:
- 1.创建一个ObjectOutputStream对象,构造方法中传递字节输出流
- 2.使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
- 3.释放资源
示例代码:
package Serializable;
import java.io.Serializable;
public class Person implements Serializable {
private String name;
private int age;
public Person(){
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package Serializable;
i