一,序列化:
和IO流有关
类 ObjectInputStream(反序列化) 和 ObjectOutputStream(序列化) 是高层次的数据流,它们包含反序列化和序列化对象的方法。
ObjectOutputStream 类包含很多写方法来写各种数据类型,但是一个特别的方法例外:
public final void writeObject(Object x) throws IOException
上面的方法序列化一个对象,并将它发送到输出流。相似的 ObjectInputStream 类包含如下反序列化一个对象的方法:
public final Object readObject() throws IOException, ClassNotFoundException
该方法从流中取出下一个对象,并将对象反序列化。它的返回值为Object,因此,你需要将它转换成合适的数据类型。
总结:序列化能干嘛? 将一个类对象信息(构造方法,属性,方法)可以写到本地一个文件中。这叫序列化。从文件中读取一个对象的信息,这叫反序列化。
序列化注意事项:
1.被序列化的实体类必须实现一个接口 Serializable,不然不能被序列化
序列化案例:
将一个对象赋值完以后写到到本地。ObjectOutputStream
二,反序列化
将本地的文件信息(被序列化过的)写到一个对象中
总结:序列化将对象的值存到本地磁盘的文件中以作备份。反序列化可以将本次磁盘序列化过的文件读取到实体类的对象中。
package com.xcl_Q;
import java.io.*;
class Emm implements Serializable{//必须实现一个接口Seroialzable
String name;
int age;
public void eat(){
System.out.println("爱吃粑粑!!!");
}
}
public class Demo6 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Emm emm = new Emm();
emm.name = "小张";
emm.age = 33 ;
// emm.eat();
//以上是为属性赋值。
//ObjectInputSteam(序列化)(是将对象序列化以后写到本地)
FileOutputStream fileOutputStream = new FileOutputStream(new File("E:/aaa/emp.ser"));//预先定义的文件类型
//将emm对象进行序列化 存在一个文件中 序列化的文件的后缀都是.ser
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);//输出流(是将要写入的内容写到本地的文件来)
objectOutputStream.writeObject(emm);//将对象信息写入本地文件中
objectOutputStream.close();//关闭流
fileOutputStream.close();//关闭流
// System.out.println("写入成功");
//下面为反序列化的代码(是将本地文件的信息读取出来)
FileInputStream fileInputStream = new FileInputStream(new File("E:/aaa/emp.ser"));//首先获取文件信息
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);//将文件反序列化到本地文件中
Emm emm1 = (Emm)objectInputStream.readObject();//将对象来进行转型(强转)
System.out.println("姓名:"+emm1.name);//打印对象信息(名字)
System.out.println("年龄:"+emm1.age);//打印对象信息(年龄)
emm.eat();//方法调用出来
/**
* 总结:
* 1,序列化的对象的值存到本地磁盘文件以作为备份 而反序列化可以将本地磁盘文件序列化
* 过得文件读取到实体对象类中
*将本地的文件信息(被序列化过的)写到一个对象中
*/
}
}