• java序列化和反序列化


    序列化概念:java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据,有关对象的类型的信息和存储在对象中数据的类型。

    反序列化概念:把字节恢复为对象的过程叫反序列化。

    类ObjectInputStream和ObjectOutputStream包含了序列化和反序列化对象的方法。

    一个类要想序列化成功,必须满足两个条件:

    该类必须实现java.io.SeriaAlizable;

    该类的所有属性必须是可序列化的,如果一个属性不是可序列化的,则该属性必须注明是短暂的。

    示例:

    SerializeDemo.java文件:用ObjectOnputStream实现序列化

    import java.io.*;
    public class SerializerDemo { 
    
        public static void main(String [] args)
        {
            Employee e = new Employee();
            e.name = "Ali";
            e.address = "yi";
            e.SSN = 123456;
            e.number = 11545;
            try {
                //文件输出流(FileOutputStream):FileOutputStream用于写入原始字节流,如图像数据。当序列化一个对象到文件时, 按照 Java 的标准约定是给文件一个 .ser 扩展名
                FileOutputStream fileOut = new FileOutputStream("C:/Users/July/Desktop/test/1.ser");
                //ObjectOutputStream 类用来序列化一个对象
                ObjectOutputStream out = new ObjectOutputStream(fileOut);
                out.writeObject(e);
                out.close();
                fileOut.close();
                System.out.printf("成功序列化");
            }catch(IOException i)
            {
                i.printStackTrace();
            }
        }
    }

     employee.java文件:

    import java.io.Serializable;
    
    //创建接口
    class Employee implements Serializable{
        public String name;
           public String address;
           public transient int SSN;
           public int number;
           
    }

    反序列化:用ObjectInputStream实现反序列化

    import java.io.*;
    public class DeserializeDemo {
    
        public static void main(String[] args) throws ClassNotFoundException {
            Employee e = null;
            try {
                FileInputStream fileIn = new FileInputStream("C:/Users/July/Desktop/test/1.ser");
                ObjectInputStream  in = new ObjectInputStream(fileIn);
                e = (Employee) in.readObject();
                in.close();
                fileIn.close();
            }catch(IOException i)
            {
                i.printStackTrace();
                return;
            }catch(ClassNotFoundException c)
            {
                System.out.println("Emplyoee类没有发现");
                c.printStackTrace();
            }
            System.out.println("执行。。。。。");
            System .out .println("Name:" + e.name );
            System .out .println("Address:" + e.address  );
            System .out .println("SSN:" + e.SSN  );
            System .out .println("Number:" + e.number );
        }
    
    }
  • 相关阅读:
    数字随机码
    MYSQL数据导出乱码 MYSQL数据导入乱码
    提交表单弹出新窗口
    腾讯捐款居然用Q币,无耻!
    PowerShell如何依靠全局错误处理并执行脚本
    Windows PowerShell 2.0语言之函数和过滤器
    Windows PowerShell 2.0创建调用脚本文件
    Windows PowerShell 2.0 开发之命令别名
    Windows PowerShell 2.0之函数和脚本块共存
    Windows PowerShell 2.0命令别名技巧与内置别名
  • 原文地址:https://www.cnblogs.com/xiaoqiyue/p/10521633.html
Copyright © 2020-2023  润新知