zoukankan      html  css  js  c++  java
  • 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.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

     

  • 相关阅读:
    日期类的时间从为什么是从1970年1月1日(格林威治时间)
    网站缓存技术总结( ehcache、memcache、redis对比)
    干货|java缓存技术详解
    TCP和UDP的区别(转)
    form表单转换为Json字符串数据
    JSON.parse 和 JSON.stringify
    Navicat连接Oracle的几个问题及解决方案
    Python IO编程
    python阶段总结一
    使用git进行版本控制
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/12563374.html
Copyright © 2011-2022 走看看