系列化流和反序列化流:
什么叫序列化和反序序列化??
ObjectOutputStream序列化流
ObjectOutputStream继承了OutputStream
ObjectOutputStream:对象序列化流
作用: 把对象以流的方式写入到文件中保存
构造方法:
ObjectOutputStream(OutputStream out)
参数: OutputStream 字节输出流 指定输出到什么地方
使用步骤:
(1)在要传入的对象的类上实现Serializable接口
(没有实现该接口,会报出java.io.NotSerializableException异常)
(2)创建ObjectOutputStream对象,构造方法中传入字节输出流
(3)使用对象中的writeObject把对象写入到相应的文件中
(4)释放资源
ObjectInputStream反序列化流
ObjectInputStream继承了InputStream
ObjectInputStream:对象的反序列化流
作用:把文件中保存的对象以流的方式读取出来
构造方法:
ObjectInputStream(InputStream in)
参数:InputStream 字节输入流
特有的成员方法
readObject() 读取对象,返回离开一个Object对象
使用步骤:
1、创建ObjectInputStream对象,传入一个字节输入流
2、使用对象的readOnject()方法
3、释放资源
4、使用得到的对象
import java.io.Serializable;
/* 该类的对象进行序列化
* 对该类的对象进行序列化的时候,如果没有实现Serializable接口,会报出异常
*
* Serializable接口作用:
* 实现该接口以启用其序列化的功能(没有实现该接口的类对象,无法使其序列化、反序列化)
* Serializable接口也叫标记性接口,进行序列化的时候就回检测这个类上是否有这个标记
* 有:可以进行序列化和反序列化
* 没有:会抛出java.io.NotSerializableException异常
* 要进行序列化的接口必须实现Serializable接口
*/
public class user implements Serializable{
private String name;
private String age;
public user() {
super();
}
public user(String name, String age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "user [name=" + name + ", age=" + age + "]";
}
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/*
* ObjectOutputStream继承了OutputStream
* ObjectOutputStream:对象序列化流
* 作用: 把对象以流的方式写入到文件中保存
*
* 构造方法:
* ObjectOutputStream(OutputStream out)
* 参数: OutputStream 字节输出流 指定输出到什么地方
*
*
* 使用步骤:
* 在要传入的对象的类上实现Serializable接口
* (没有实现该接口,会报出java.io.NotSerializableException异常)
* 创建ObjectOutputStream对象,构造方法中传入字节输出流
* 使用对象中的writeObject把对象写入到相应的文件中
* 释放资源
*
*/
public class ObjectOutputStreamText1 {
public static void main(String[] args) throws FileNotFoundException, IOException {
//1、创建一个ObjectOutputStream对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ObjectOutputStreamText1.txt"));
//2、使用writeOnject()方法往文件中写入一个对象
oos.writeObject(new user("张三","20"));
//3、释放资源
oos.close();
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
/*
* ObjectInputStream继承了InputStream
* ObjectInputStream:对象的反序列化流
* 作用:把文件中保存的对象以流的方式读取出来
*
* 构造方法:
* ObjectInputStream(InputStream in)
* 参数:InputStream 字节输入流
* 特有的成员方法
* readObject() 读取对象,返回离开一个Object对象
*
* 使用步骤:
* 1、创建ObjectInputStream对象,传入一个字节输入流
* 2、使用对象的readOnject()方法
* 3、释放资源
* 4、使用得到的对象
*/
public class ObjectInputStreamText1 {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
//1、创建ObjectInputStream,构造方法中传入字节输入流
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\eclipseSE源码\\java初学\\ObjectOutputStreamText1.txt"));
//2、调用对象的readObject()方法
Object obj = ois.readObject();
//3、释放资源
ois.close();
//4、调用读取的对象
System.out.println(((user)obj).toString());
}
}