1.序列化: 把对象转换成字节序列的过程;把对象进行拆分成字节,有顺序
如何序列化:
1.类实现Serializable接口 (标识接口)
2.序列化的类
ObjectOutputStream
DataOutputStream
3.不能被序列化
静态的变量,transient修饰的变量
2.反序列化:把字节序列转化成对象的过程; 把字节组装成对象
ObjectInputStream
DataInputStream
3.作用
1.有利于对象保存到磁盘文件
2.有利于对象在网络上传输
序列化步骤:
Company文件:
1、class Company implements Serializable//实现序列化接口
private static final long serialVersionUID = 5988246887021315928L;
2、public Company(int id, String name) {
super();
this.id = id;
this.name = name;
}
(创建文本保存想保存的对象,然后将二进制文件放入字节输出流,此时将字节输出流强化直接传输对象,最后用强化输出流通过writeObject方法直接传输最初创建的raky对象)
Company raky = new Company(1000,"小米");
第一步:保存到目标文件用来保存对象
File dest = new File("e:\\raky_Object.txt");
第二步:创建文件输出流
FileOutputStream fos = new OutputStream(dest);
第三步:创建对象输出流(用来传输对象数据) 此时会报IOException异常
ObjectOutputStream oos = new ObjtctOutputStram(fos);
(前三步可写成)ObjectOutputStream oos = new ObjectOutPutStream(new OutputStream(new
File("e:\\raky.txt")));
第四步:写对象(将整体数据转换成字节输出)
oos.writeObject(raky);
第五步:关闭资源
oos.close();
反序列化:将二进制文件中的内容分转换成对象
第一步:保存到目标文件(可以是相同的文件地址)
File source = new File("e:\\raky_object.txt");
第二步:创建文件输入流,传输要进过的二进制文件
FileInputStream fis = new FileInputStream(source);
第三步:创建文件输入流加强管道,将文件输入流进行改造
ObjectInputStream ois = new ObjectInputStream(fis);
(前三步可写成) ObjectInputStream ois = new ObjectInputStram(new FileInputStream(new
File("e:\\raky.txt")));
第四步:将Object向下转型成raky对象
Object o = ois.readObject();
if(o instanceof Company){
Company raky = (Company)o;
System.out.println(raky.getName());
System.out.println(raky);
}