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

    原生序列化:

    https://blog.csdn.net/jtf8525140/article/details/81094222

    MessagePack

    Protocol Buffers

    Dubbo kryo

    序列化可以系统的通用性、强壮性、优化性能,同时让系统更易于调试和扩展

    1.序列化不保存静态变量的状态

    2. transient 修饰的参数 不参与序列化

    3.父类对象属性进行序列化的时候,要实现Serializable 接口

     Peron

    public class Person implements Serializable{
    
    
        private static final long serialVersionUID = -2140242550063332020L;
    
        // transient 修饰的参数 不参与序列化
        private transient int age;
    
        private  String name;
    
        public static int gender = 1;
    
        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;
        }
    }
    View Code

    序列化对象

    public class SerializeDemo {
        public static void main(String[] args) {
            serializePerson();
            //序列化不保存静态变量的状态
            Person.gender = 2;
            deSerializePerson();
        }
    
    
        private static void serializePerson() {
            try {
                ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("person")));
                Person person = new Person();
                person.setAge(18);
                person.setName("mic");
                oo.writeObject(person);
                oo.flush();
                oo.writeObject(person);
                oo.flush();
                System.out.println("序列化成功"+new File("person").length());
                //-----------------------
                // 重复保存对象的时候,保存的是对象的引用
                ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(new File("person")));
                Person person1 = (Person) inputStream.readObject();
                Person person2 = (Person) inputStream.readObject();
                System.out.println(person1==person2);
                //---------------------------
                oo.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
    
        private static void deSerializePerson() {
            try {
                ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(new File("person")));
                Object o = inputStream.readObject();
                if (o instanceof Person) {
                    Person person = (Person) o;
                    System.out.println(person.getAge()+","+ person.gender);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

     子类对象继承父类对象属性序列化的时候,需要父类也要实现序列化

    /**
     * 父类对象属性进行序列化的时候,要实现Serializable 接口
     */
    public class SuperPerson implements Serializable{
    
        private int age;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

    User

    public class User extends SuperPerson implements Serializable{
    
    
        private static final long serialVersionUID = 1362833492159178974L;
    
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

     demo:

    public class SuperPersonDemo {
    
        public static void main(String[] args) {
            serializePerson();
            //序列化不保存静态变量的状态
            Person.gender = 2;
            deSerializePerson();
        }
    
    
        private static void serializePerson() {
            try {
                ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("person")));
                User person = new User();
                person.setAge(18);
                person.setName("mic");
                oo.writeObject(person);
                System.out.println("序列化成功");
                oo.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    
        private static void deSerializePerson() {
            try {
                ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(new File("person")));
                Object o = inputStream.readObject();
                if (o instanceof User) {
                    User person = (User) o;
                    System.out.println(person.getAge()+","+person.getName());
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    遇到的两个问题
    项目分析(map复习)
    while小问题
    二级指针
    映射文件实现进程通信
    struct {0}初始化
    用boost共享内存实现进程通信的例子
    mongo二维数组操作
    项目分析(channelid是如果产生的)
    string为什么可以写入共享内存
  • 原文地址:https://www.cnblogs.com/newlangwen/p/10384116.html
Copyright © 2011-2022 走看看