1.对象的序列化流ObjectOutputStream
java.io.ObjectOutputStream extends OutputStream 构造方法:ObjectOutputStream(OutputStream out) 创建写入指定 OutputStream 的 ObjectOutputStream。 参数:OutputStream out:字节输出流 特有的成员方法:写对象的方法 void writerObject(Object obj)将指定对象写入ObjectOutputStream 使用步骤: 1、创建ObjectOutputStream对象,构造方法中传递字节输出流 2、使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中 3、释放资源
Person类:注意这里要有Serializable标记
序列化和反序列化时会抛出NotSerializableException没有序列化异常 类通过实现java/io.Serializable接口以启用其序列化功能,未实现此接口的类将无法使其任何状态序列化或反序列化 Serializable接口也叫标记型接口 要进行序列化和返序列化的类(序列化反序列化就是写入读取对象)必须实现Serializable接口,就会给类添加一个标记 当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记 有:就可以进行序列化和反序列化 没有:就会抛出NotSerializableException没有序列化异常 去市场卖肉-》肉上有一个蓝色的检验检疫合格章--》放心购买-->买回来怎么吃就随意了
import java.io.Serializable;
/*
序列化和反序列化时会抛出NotSerializableException没有序列化异常
类通过实现java/io.Serializable接口以启用其序列化功能,未实现此接口的类将无法使其任何状态序列化或反序列化
Serializable接口也叫标记型接口
要进行序列化和返序列化的类(序列化反序列化就是写入读取对象)必须实现Serializable接口,就会给类添加一个标记
当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记
有:就可以进行序列化和反序列化
没有:就会抛出NotSerializableException没有序列化异常
去市场卖肉-》肉上有一个蓝色的检验检疫合格章--》放心购买-->买回来怎么吃就随意了
*/
public class Person implements Serializable { //序列化和反序列化的类要实现标记型接口
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", 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;
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
psvm
java.io.ObjectOutputStream extends OutputStream 构造方法:ObjectOutputStream(OutputStream out) 创建写入指定 OutputStream 的 ObjectOutputStream。 参数:OutputStream out:字节输出流 特有的成员方法:写对象的方法 void writerObject(Object obj)将指定对象写入ObjectOutputStream 使用步骤: 1、创建ObjectOutputStream对象,构造方法中传递字节输出流 2、使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中 3、释放资源
package Demo14;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/*
java.io.ObjectOutputStream extends OutputStream
构造方法:ObjectOutputStream(OutputStream out)
创建写入指定 OutputStream 的 ObjectOutputStream。
参数:OutputStream out:字节输出流
特有的成员方法:写对象的方法
void writerObject(Object obj)将指定对象写入ObjectOutputStream
使用步骤:
1、创建ObjectOutputStream对象,构造方法中传递字节输出流
2、使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
3、释放资源
*/
public class Demo01ObjectOutputStream {
public static void main(String[] args) throws IOException {
// 1、创建ObjectOutputStream对象,构造方法中传递字节输出流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\百度网盘下载\\a.txt"));
// 2、使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
oos.writeObject(new Person("TT",18)); //二进制存储无法直接看
// 3、释放资源
oos.close();
}
}
2、对象的反序列化流ObjectInputStream
java.io.ObjectInputStream extends InputStream ObjectInputStream:对象的反序列化流 作用:把文件中保存的对象,以流的形式读取出来使用 构造方法: ObjectInputStream(InputStream in) 创建从指定 InputStream 读取的 ObjectInputStream 参数:InputStream in:字节输入流对象 特有的成员方法 Object readObject(); 使用步骤: 1、创建ObjectInputStream对象,构造方法中传递字节输入流 2、使用ObjectInputStream对象中的方法readObject读取保存对象的文件 3、释放资源 4、使用读取出来的对象(打印) readObject();方法声明了ClassNotFoundException异常(class文件找不到异常) 当不存在对象的class文件时就抛出此异常 反序列化的前提: 1、类必须实现Serializable 2、必须存在类对应的class文件
package Demo14;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
/*
java.io.ObjectInputStream extends InputStream
ObjectInputStream:对象的反序列化流
作用:把文件中保存的对象,以流的形式读取出来使用
构造方法:
ObjectInputStream(InputStream in) 创建从指定 InputStream 读取的 ObjectInputStream
参数:InputStream in:字节输入流对象
特有的成员方法
Object readObject();
使用步骤:
1、创建ObjectInputStream对象,构造方法中传递字节输入流
2、使用ObjectInputStream对象中的方法readObject读取保存对象的文件
3、释放资源
4、使用读取出来的对象(打印)
readObject();方法声明了ClassNotFoundException异常(class文件找不到异常)
当不存在对象的class文件时就抛出此异常
反序列化的前提:
1、类必须实现Serializable
2、必须存在类对应的class文件
*/
public class Demo02ObjectInputStream {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//1、创建ObjectInputStream对象,构造方法中传递字节输入流
ObjectInputStream ois= new ObjectInputStream(new FileInputStream("D:\\百度网盘下载\\a.txt"));
//2、使用ObjectInputStream对象中的方法readObject读取保存对象的文件
Object o = ois.readObject();
// 3、释放资源
ois.close();
// 4、使用读取出来的对象(打印)
System.out.println(o);//Person{name='TT', age=18}
Person p = (Person)o; //强制转换为Person类
System.out.println(p.getName()+p.getAge());//TT18
}
}