zoukankan      html  css  js  c++  java
  • 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对象,反序列化恢复的时候必选按照实际写入的顺序读取

    温故而知新
  • 相关阅读:
    Atom | 编辑器Atom的使用小结
    离散数学 | ∅ 与 {∅} 出现在离散数学幂集合中
    Excel | 如何用Excel实现证件照底色调换
    Awesome图标 | 如何在某些编辑软件中使用Font Awesome字体图标
    将SSH的秘钥每次输入的密码去掉
    用canvas 画一个水位波纹上升下降的进度球
    解决Enter passphrase for key '/Users/mac/.ssh/id_rsa':的问题
    vue 注册全局过滤器
    解决vue的父组件打开子组件弹窗只走一次mounted的问题
    forEach终止循环的方法
  • 原文地址:https://www.cnblogs.com/Uzai/p/9647832.html
Copyright © 2011-2022 走看看