Java连载102-对象类文件的序列化与反序列化


一、对象类文件的序列换与反序列化

1.java.io.ObjectOutputStream;序列化JAVA对象到硬盘

2.java.io.ObjectInputStream;将硬盘中的数据“反序列化”到JVM内存中

Compile编译(java->class)

DeCompile反编译(class->java)

3.标识性接口的作用:

JVM如果检查到该对象实现了某个标识接口,会对它进行特殊待遇

如下代码中的User102实现的接口Serializable

疑问:User102实现Serializable接口,JVM会对它的特殊待遇是什么?

 

package com.bjpowernode.java_learning;

import java.io.*;

import java.io.Serializable;

​

public class D102_1_ObjectOutputStream {

  public static void main(String[] args) throws IOException,ClassNotFoundException{

    //1.创建java对象

    User102 u1 = new User102("彭于晏");

   

    //2.创建输出流(序列化流)(JVM中的对象状态保存到硬盘中)

    String address = "C:\\\\Users\\\\lenovo1\\\\Workspaces\\\\MyEclipse CI\\\\Java_learning\\\\src\\\\com\\\\bjpowernode\\\\java_learning\\\\temp1.txt";

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(address));

   

    //3.写入

    oos.writeObject(u1);//写进去的不是几个文字,而是一个字符串对象

   

    //4.刷新

    oos.flush();

    //5.关闭

    oos.close();

   

    //接下来我们需要把序列化的对象给读出来,也就是反序列化

    //6.创建反序列化流

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(address));

    //7.反序列化

    Object o = ois.readObject();

    System.out.println(o);

    //关闭

    ois.close();

  }

}

class User102 implements Serializable{//该接口是一个可序列化的,该接口没有任何方法,该接口是一个

  //标志性的接口,像这样的接口还有java.util.Cloneable

  String name;

  User102(String name){

    this.name=name;

  }

  public String toString() {

    return "User[name="+name+"]";

  }

}

二、源码:

D102_1_ObjectOutputStream.java

https://github.com/ruigege66/Java/blob/master/D102_1_ObjectOutputStream.java​

2.CSDN:https://blog.csdn.net/weixin_44630050

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

 

 


作者:心悦君兮君不知-睿,发布于:2020/03/26
原文:https://www.cnblogs.com/ruigege0000/p/12563374.html