对象流:高级流之一
把内存的对象数据,序列化到硬盘上,也可以把硬盘上的文件
反序列化到内存的对象
序列化:
把内存的对象序列化到硬盘上,以字节的方式体现
反序列化:
把硬盘上字节序列,反序列化回内存中的对象
比如:
Student stu=new Student("张三",20,"s001");
Stu-->硬盘上(序列化)-->内存堆中出现stu对象(反序列化)
注意:
如果要实现对象的序列化和反序列化,就必须对序列化的对象
所对应的类实现java,io,Serializable接口
且类中最好给提供一个long类型的序列化的版本号
比如:
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
fileld 属性;
method 方法
}
Java.io.Serializable接口:
此接口仅表示可序列化语义,某个类实现了这个接口,
就是说这个类表示了可以序列化这个语义,这个类的子类
也同样具备序列化语义,这个类需要提供一个常量SerializableUID
用来表示本类的序列化版本号
如果想跨平台,就需要显示声明一个版本号,且平台两端的版本必须相同
序列化类中可以有很多的属性,但部分属性不想被序列化和
反序列化,把类中的不需要序列化的属性前加上transient修饰符
Transient:瞬间的,短暂,临时的
Public class Student implements Serializable{
private static final long serialVersionUID = 1L;
private transient String name;//不可以序列化
private int age;//可以序列化
field 属性
method 方法
}
例子:
首先创建一个Student类
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String name;//可以序列化
private int age;//可以序列化
private transient String stuNO;//不可以序列化
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;
}
public String getStuNO() {
return stuNO;
}
public void setStuNO(String stuNO) {
this.stuNO = stuNO;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", stuNO=" + stuNO + "]";
}
}
在创建一个测试类
public class TestObjectStream {
/**
* 序列化对象到硬盘中
*/
@Test
public void testMethod1()throws IOException{
Student stu1=new Student();
stu1.setName("张三");
stu1.setAge(20);
stu1.setStuNO("S001");
//构建低级流
OutputStream os=new FileOutputStream("d:/aa/student.data");
//构建高级流 对象输出流
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(stu1);
oos.flush();
oos.close();
os.close();
}
/**
* 反序列化操作
*/
@Test
public void testMethod2(){
try {
//构建低级输入流
InputStream is=new FileInputStream("d:/aa/student.data");
//构建对象的高级输入流
ObjectInputStream ois=new ObjectInputStream(is);
Student stu=(Student)ois.readObject();
System.out.println(stu);
ois.close();
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}