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

    概念

    序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。 
    序列化分为两大部分:序列化和反序列化。

    序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。

    反序列化就是打开字节流并重构对象。

    特点

    如果某个类能够被序列化,其子类也可以被序列化。

    声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象的临时数据。

    相关的类和接口

    在java.io包中提供的涉及对象的串行化的类与接口有:

       ObjectOutput接口、ObjectOutputStream类、ObjectInput接口、ObjectInputStream类。

    • ObjectOutput接口:它继承DataOutput接口并且支持对象的串行化,其内的writeObject()方法实现存储一个对象。
    • ObjectInput接口:它继承DataInput接口并且支持对象的串行化,其内的readObject()方法实现读取一个对象。
    • ObjectOutputStream类:它继承OutputStream类并且实现ObjectOutput接口。利用该类来实现将对象存储(调用ObjectOutput接口中的writeObject()方法)。
    • ObjectInputStream类:它继承InputStream类并且实现ObjectInput接口。利用该类来实现读取一个对象(调用ObjectInput接口中的readObject()方法)。

    上代码来一探究竟

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.util.Date;
    
    
    public class ObjectSerialize {
        public static void main(String[] args) throws Exception {
            String filePath = "D:\\objectFile.txt";
            
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
                    filePath));
    
            // 序列化对象
            Person person = new Person("幻影", 25);
            out.writeObject("你好!");
            out.writeObject(new Date());
            out.writeObject(person);//自定义对象类型
            out.writeInt(123); // 写入基本类型数据
            out.close();
            
            
            // 反序列化对象
            ObjectInputStream in = new ObjectInputStream(new FileInputStream(
                    filePath));
    
            System.out.println("obj1=" + (String) in.readObject());
            System.out.println("obj2=" + (Date) in.readObject());
            Person obj3 = (Person) in.readObject();
            System.out.println("obj3=" + obj3);
            int obj4 = in.readInt();
            System.out.println("obj4=" + obj4);
            in.close();
        }
    }
    
    class Person implements Serializable {
        private static final long serialVersionUID = 1L;
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String toString() {
            return "name=" + name + ", age=" + age;
        }
    }

    更多资料:https://www.ibm.com/developerworks/cn/java/j-lo-serial/

  • 相关阅读:
    [ZOJ 4062][2018ICPC青岛站][Plants vs. Zombies]
    [Wannafly挑战赛28][B msc和mcc][预处理+枚举]
    [codeforces Mail.Ru Cup 2018 Round 1 D][ xor 操作]
    [codeforces round#475 div2 ][C Alternating Sum ]
    [zoj4045][思维+dfs]
    [zoj4046][树状数组求逆序(强化版)]
    费马大定理以及求解a^2+b^2=c^2的奇偶数列法则
    【HDOJ3567】【预处理bfs+映射+康拓展开hash】
    POJ1279 Art Gallery 多边形的核
    第八周 Leetcode 44. Wildcard Matching 水题 (HARD)
  • 原文地址:https://www.cnblogs.com/yejg1212/p/3011263.html
Copyright © 2011-2022 走看看