package IO.OutputStream.ObjectOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* @Author 小王宝友
* @Version 3.89
* 使用ObjectOutputStream完成数据的序列化
*/
public class ObjectOutputStream_ {
public static void main(String[] args) throws IOException {
//序列化后,保存的文件格式,不是存文本,而是按照系统本分的格式来保存
String filePath = "e:\\data.dat";
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(filePath));
//序列化数据到e:\data.dat
//int --> Integer (实现了Serializable接口)
objectOutputStream.write(100);
//boolean --> Boolean (实现了Serializable接口)
objectOutputStream.writeBoolean(true);
//char --> Character (实现了Serializable接口)
objectOutputStream.writeChar('a');
//double --> Double (实现了Serializable接口)
objectOutputStream.writeDouble(10.52);
//String(实现了Serializable接口)
objectOutputStream.writeUTF("北京欢迎您");
objectOutputStream.writeObject(new Dog("大傻子",100));
objectOutputStream.close();
System.out.println("数据保存完毕");
}
}
//若需要序列化某个类的对象,就必须实现Serializable接口
class Dog implements Serializable {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
}
在以上的代码中,我们开始序列化数据信息
package IO.InputStream.ObjectInputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
/**
* @Author 小王宝友
* @Version 3.89
* 使用ObjectInputStream读取data.dat并反序列化恢复数据
*/
public class ObjectInputStream_ {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//1.创建流对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e:\\data.dat"));
//2.读取,注意顺序
//反序列化的顺序必须和序列化时的顺序一致,否则会出现异常
System.out.println(ois.readInt());
System.out.println(ois.readBoolean());
System.out.println(ois.readChar());
System.out.println(ois.readDouble());
System.out.println(ois.readUTF());
System.out.println(ois.readObject());//底层会将Object->Dog
System.out.println("反序列化完成");
ois.close();
}
}
以上代码是反序列化信息并输出
然后就会出现EOFException异常,我在各大博客找了一遍,都是关于TomCat中服务器断开的问题并没有关于序列化的问题
结果我发现我反序列化时第一个int类型返回出来的是一长段数字,我就去看第一段代码,然后发现我的writer后面并没有加int,导致我整个顺序就发生错误
在添加了int之后就好了