• Java IO 5 : 对象序列化


    对象序列化:
      对象的序列化(Serialize)指将一个java对象写入IO流中;
      对象的反序列化(Deserialize)指从IO流中恢复该Java对象;

    序列化的含义和意义:
      序列化机制允许将实现序列化的java对象转换成字节序列,将这些字节序列可以保存在磁盘,或者通过网络传输,以后重新恢复成原来的对象。
      序列化使得对象可以脱离程序的运行 , 独立存在。
      所有的分布式应用常常需要跨平台,跨网络,所以要求所有传递的参数,返回值必须实现序列化。
      通常建议:程序创建的每个JavaBean类都实现Serializable

    如果要让某个对象支持序列化机制,该类必须实现两个接口之一  :   Serializable  Externalizable

    使用对象流实现序列化 : demo如下

    package com.demo.serialize;
    
    import java.io.Serializable;
    
    public class Person implements Serializable{
    
        private String name ;
        private int age;
        
        public Person(String name, int age) {
            System.out.println("序列化成功");
            this.name = name;
            this.age = age;
        }
        /*//这是没有无参构造器的,加了无参的反序列化的时候报错
        public Person() {
            super();
            // TODO Auto-generated constructor stub
        }*/
    
        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 + "]";
        }
        
    }
    View Code
    package com.demo.serialize;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    
    public class WriteObject {
    
        public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
            
            ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream("D://object.txt"));
            Person person = new Person("张三", 18);
            objOut.writeObject(person);
            objOut.close();
            System.out.println("----------------------");
            ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("D://object.txt"));
            Person p = (Person)objIn.readObject();
            System.out.println(p.toString());
            objIn.close();
        }
    }
    View Code

    注意事项:  1.person类只有一个有参数的构造器,加无参构造器,反序列化报错,
              2.序列化的时候person里面是有打印一句话的,但是反序列化的时候没有打印,说明反序列化机制无须通过构造器来初始化java对象。
            3.反序列化的时候,要有对应的java类 , 不然会报calssNotFoundException异常
            4.如果使用序列化机制往一个文件中写入多个java对象,反序列化恢复的时候必选按照实际写入的顺序读取

    温故而知新
  • 相关阅读:
    “程序设计与算法训练”课程设计:“BP神经网络的实现”(C++类封装实现)
    Ubuntu 16.04如何使用无线网卡上网
    Ubuntu 16.04上thunderbird配置163邮箱出现“配置无法被验证-请查看用户名或密码是否正确?”
    合肥工业大学数据结构上机实验代码与实验报告(全)github地址
    Ubuntu 16.04 LTS上git提交出现警告Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts. 的解决方法
    数据结构实验9:图的相关操作
    在Ubuntu 16.04 LTS上用g++和gcc编译C/C++代码错误提示“.../x86_64-linux-gnu/crt1.o: ELF section name out of range”
    pythonlinux配置环境变量
    Tcp和UDP的实现
    值得多看的开源项目
  • 原文地址:https://www.cnblogs.com/Uzai/p/9647832.html
Copyright © 2020-2023  润新知