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

    序列化的存在是为了让他们离开内存空间,存入磁盘,以便长期保存。

    反序列化就是把磁盘中的文件拿到内存中来。

    以内存为基准,想内存中放数据就使用ObjectInputStream   

      从内存中取出数据到磁盘就使用ObjectOutputStream


    只有实现了 Serializable或 Externalizable接口的类的对象才能被序列化。
    实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以 采用默认的序列化方式 。

    序列化使用的是 

      ObjectOutputStream对象   和  writeObject方法

    反序列化使用的是ObjectInputStream   和readObject方法

    1.创建一个Person类实现了Serializable接口

    package cn.happy.Serialization;
    
    import java.io.Serializable;
    
    public class Person implements Serializable {
    
         private static final long serialVersionUID = -5809782578272943999L;//序列化版本标识符
         private int age;
         private String name;
         private String sex;
    
    
        public static long getSerialVersionUID() {
            return serialVersionUID;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    }

    2.实现序列化和反序列化

    package cn.happy.Serialization;
    
    import java.io.*;
    import java.text.MessageFormat;
    
    public class TestObjSerializeAndDeserialize {
    
        public static void main(String[] args) throws Exception {
                    //序列化方法
                    SerializePerson();
                    //反序列化方法
            Person p = DeserializePerson();
            System.out.println(MessageFormat.format("name={0},age={1},sex={2}",p.getName(),p.getAge(),p.getSex()));
        }
        //序列化
        private static void SerializePerson() throws Exception{//记得声明异常,不然new FileOutputStream(new File("D:/序列化输入地址.txt"))会报错。
            Person person=new Person();
            person.setAge(12);
            person.setName("小明");
            person.setSex("男");
            //ObjectOutputStream将内存中的内容输出到磁盘中。
            ObjectOutputStream outputStream=new ObjectOutputStream(new FileOutputStream(new File("D:/序列化输入地址.txt")));
            outputStream.writeObject(person);
            System.out.println("序列化成功");
            outputStream.close();
        }
        //反序列化
        private static Person DeserializePerson()throws Exception{
            //使用ObjectInputStream写到内存
            ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream(new File("D:/序列化输入地址.txt")));
            Person ps= (Person) objectInputStream.readObject();
            System.out.println("反序列化成功");
            return ps;
        }
    }

    结果:

  • 相关阅读:
    DB-MySQL:MySQL 函数
    DB-MySQL:目录
    文学-人物:王阳明
    院校:伦敦大学学院
    文学-人物:曹操
    文学-人物:诸葛亮
    x2go
    PHP+jQuery 注册模块开发
    java中Runtime类详细介绍
    java中Runtime类详细介绍
  • 原文地址:https://www.cnblogs.com/java-263/p/10171176.html
Copyright © 2011-2022 走看看