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对象,反序列化恢复的时候必选按照实际写入的顺序读取

    温故而知新
  • 相关阅读:
    Windows7 共享文件夹的两个BUG
    POJ 1845 Sumdiv(数论,求A^B的所有约数和)
    POJ 2481 Cows(树状数组)
    HDU 1124 Factorial(简单数论)
    POJ 1195 Mobile phones(二维树状数组)
    POJ 3067 Japan(树状数组求逆序对)
    HDU 4027 Can you answer these queries?(线段树)
    HDU 1576 A/B(数论简单题,求逆元)
    HDU 1166 敌兵布阵(线段树,树状数组)
    ZOJ 1610 Count the Colors(线段树)
  • 原文地址:https://www.cnblogs.com/Uzai/p/9647832.html
Copyright © 2011-2022 走看看