一、对象流(也是一种高级流)
对象流作用:进行对象的序列化和反序列化的操作。
对象的序列化:将一个对象按照其结构转换成为一组字节的过程。
对象的反序列化:将一组字节(必须是序列化的一组字节)还原为一个对象的过程。
好处:有了对象流,我们可以很方便区读写任何Java对象
对象输入流:java.io.ObjectInputStream
对象输出流:java.io.ObjectOutputStream
对象如果需要序列化是需要为当前对象的模板类添加实现Serializable接口。
用一个例子来说明(待续):
人的模板类:
package io;
import java.io.Serializable;
import java.util.Arrays;
/**
* 人类模板
* 当一个类实现了可序列化接口时,最好显示的定义serialVersionUID序列化版本号
* 当对象输出流在进行对象的序列化时,会查看是否有显示的定义版本号,如果没有则会根据当前类结构自动
计算版本号,
* 只要当前类的结构发生变化,这个类的版本号就会发生改变,而版本号不一致,就会导致反序列化失效,所以
我们要固定版本号. */
public class Person implements Serializable { //固定当前类的版本号为1,创建的对象都是这个版本号 static final long serialVersionUID = 1L; private String name;
private int age;
private String gender;
/*
* 当一个属性被transient修饰后,那么当进行对象序列化时,该属性的值会被忽略
* 当然,反序列化时,该属性只会采用默认值
* transient: 短暂的,转瞬即逝的 */
private transient String[] otherInfo;//其它信息
private int salary;//薪资
//1.在当前空白区域 alt + insert 或 右键 找到 Generate 选中 //选择 get and set 方法 全选生成
//重复操作1. 选择 toString
//重复操作1. 选择 第一个选择 生成构造方法 全选 生成。
public Person(String name, int age, String gender, String[] otherInfo, int
salary) {
this.name = name;
this.age = age;
this.gender = gender;
this.otherInfo = otherInfo;
this.salary = salary;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", otherInfo=" + Arrays.toString(otherInfo) +
", salary=" + salary +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int ge