zoukankan      html  css  js  c++  java
  • Java实现对象的序列化

    什么是对象的序列化?

    序列化:把对象转化成字节序列的过程就是对象的序列化;反序列化:把字节序列转化成对象的过程就是对象的反序列化。单看概念比较抽象,但是看代码就会明白。

    对象序列化的用途

    1、Java程序在运行中,对象都是分配在内存中,而序列化的一个用途就是将内存的中对象转化成磁盘中的对象。

    2、对象不能直接在网络中传输,有时候需要将对象转成字节序列在网络中传输,这就是对象序列化的第二个用途。

    如何实现对象的序列化?

    1、新建一个实体对象,实现Serializable接口,这个实体对象就可以进行序列化了

    package test.entity;
    
    import java.io.Serializable;
    
    /**
     * 实体类,用于序列化
     * 
     * @author YaoQi
     * @date 2017年6月24日
     */
    public class Person implements Serializable {
    
        /**
         * 序列化ID
         */
        private static final long serialVersionUID = -3245478690496182643L;
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + "]";
        }
    }

    2、在另一个类中序列化这个实体类,并且将序列化之后的字节序列存在磁盘上。

    package test.serializable;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.Date;
    import test.entity.Person;
    
    /**
     * java实现对象的序列化
     * 
     * @author YaoQi
     * @date 2017年6月24日
     */
    public class SerializableDemo {
        public static void main(String[] args) throws Exception {
            
            //序列化一个对象
            ObjectOutputStream objOutputStream = new ObjectOutputStream(new FileOutputStream("D:\obj.txt"));
            Person person = new Person();
            person.setName("Tom");
            person.setAge(24);
            
            //写入字面值常量
            objOutputStream.writeObject("将对象序列化");
            //写入匿名对象
            objOutputStream.writeObject(new Date());
            //写入对象
            objOutputStream.writeObject(person);
            
            //反序列化一个对象
            ObjectInputStream objInputStream = new ObjectInputStream(new FileInputStream("D:\obj.txt"));
            System.out.println("读取的字面值常量:"+(String)objInputStream.readObject());
            System.out.println("读取的匿名对象"+(Date)objInputStream.readObject());
            System.out.println("读取person对象"+((Person)objInputStream.readObject()).toString());
        }
    }

    执行之后控制台结果如下:

    读取的字面值常量:将对象序列化
    读取的匿名对象Sat Jun 24 22:42:22 CST 2017
    读取person对象Person [name=Tom, age=24]

  • 相关阅读:
    DDD之3实体和值对象
    DDD之2领域概念
    DDD之1微服务设计为什么选择DDD
    SOFA入门
    COLA的扩展性使用和源码研究
    kafka可插拔增强如何实现?
    请设计一个核心功能稳定适合二开扩展的软件系统
    如何保证kafka消息不丢失
    kafka高吞吐量之消息压缩
    kafka消息分区机制原理
  • 原文地址:https://www.cnblogs.com/hello-daocaoren/p/7074789.html
Copyright © 2011-2022 走看看