zoukankan      html  css  js  c++  java
  • 序列化与反序列化

    最近看了点有关序列化与反序列化的视频,做了点笔记,一来备忘,二来和大家分享一下^_^

    对象的序列化,反序列化: 一个类实现了序列化接口,那么其子类都可以进行序列化。对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么其父类的构造函数会被调用
    1)对象序列化,就是将Object转换成byte序列(把Java对象转换为字节序列的过程),反之则叫对象的反序列化。
    2)序列化流(ObjectOutputStream)是过滤流----writeObject    反序列化流(ObjectInputStream)----readObject
    3)序列化接口(Serializable)
    对象必须实现序列化接口,才能进行序列化,否则将出现异常。这个接口,没有任何方法,只是一个标准。
    4)transient关键字
    被transient修改的成员变量,不会进行JVM默认的序列化。
     
    public class Student implements Serializable{
        private static final long serialVersionUID = 1L;
        private String stuno;
        private String stuname;
        private transient int stuage;//该元素不会进行jvm默认的序列化,也可以自己完成这个元素的序列化
        public Student(String stuno, String stuname, int stuage) {
            super();
            this.stuno = stuno;
            this.stuname = stuname;
            this.stuage = stuage;
        }
        @Override
        public String toString() {
            return "Student [stuno=" + stuno + ", stuname=" + stuname + ", stuage=" + stuage + "]";
        }
       //序列化
        private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{
            s.defaultWriteObject(); //把jvm能默认序列化的元素进行序列化操作
            s.writeInt(stuage);//自己完成stuage的序列化
        }
       //反序列化
        private void readObject(java.io.ObjectInputStream s) throws java.io.IOException,ClassNotFoundException{
            s.defaultReadObject();//把jvm能默认反序列化的元素进行反序列化操作
            this.stuage=s.readInt();//自己完成stuage的反序列化操作
        } 
         //测试序列化与反序列化
         public static void main(String[] args) throws IOException, ClassNotFoundException {
               Student student=new Student("123", "lily", 22);
               java.io.FileOutputStream out = new java.io.FileOutputStream("test.txt");
               java.io.ObjectOutputStream oout = new java.io.ObjectOutputStream(out);
               oout.writeObject(student);  //序列化,将Student对象存到磁盘
               oout.close();
               java.io.FileInputStream is=new java.io.FileInputStream("test.txt");
               java.io.ObjectInputStream ois = new java.io.ObjectInputStream(is);
               System.out.println("" + (Student) ois.readObject());  //反序列化,读取Student相关信息
            ois.close();
         }
    }
  • 相关阅读:
    python基础之元组,集合
    python列表补充、循环
    python基础之字典、赋值补充
    python基础2
    基本数据类型
    计算机基础与计算机硬件总结
    python基础
    操作系统
    Django APP打包重用
    PyCharm 使用Github托管Django项目
  • 原文地址:https://www.cnblogs.com/nana-blog/p/5972644.html
Copyright © 2011-2022 走看看