• Java对象的序列化和反序列化


    Java对象的序列化和反序列化

    一:序列化和反序列化的概念。

    两个用于从流中读取对象

    序列化:将对象转换字节序列的过程称为对象的序列化。

    反序列化:将字节序列恢复为原对象的过程称为对象的反序列化。(把对象的字节序列永久的保存到硬盘上,通常放一个文件)。

    二:JDK库中的序列化API

    反序列化流:ObjectInputStrean,它的readObject()方法从持久化存储中把对象读取出来。

    序列化流:ObjectOutputStream,它的writeObject()方法将字节序列永久的写入硬盘上。

    对象序列化过程:

    1、创建一个对象输出流ObjectOutputStream。

    2、通过输出流的writeObject()方法写对象。

    反序列化过程:

    1、创建一个对象输入流ObjectInputStream。

    2、通过输入流的readObject()方法读对象

    例子:

    定义一个person类,实现 Serializable接口

     1 package com.aaa.demo4;
     2 
     3 import java.io.Serializable;
     4 
     5 public class Demo1Person implements Serializable{
     6     public String name;
     7     public int age;
     8     public Demo1Person() {
     9     }
    10     public Demo1Person(String name, int age) {
    11         super();
    12         this.name = name;
    13         this.age = age;
    14     }
    15     public String getName() {
    16         return name;
    17     }
    18     public void setName(String name) {
    19         this.name = name;
    20     }
    21     public int getAge() {
    22         return age;
    23     }
    24     public void setAge(int age) {
    25         this.age = age;
    26     }
    27     @Override
    28     public String toString() {
    29         return "Demo1Person [name=" + name + ", age=" + age + "]";
    30     }
    31     
    32 }

    序列化和反序列化Person对象:

     1 package com.aaa.demo4;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileNotFoundException;
     5 import java.io.FileOutputStream;
     6 import java.io.ObjectInputStream;
     7 import java.io.ObjectOutputStream;
     8 
     9 public class Demo1ObjectStream {
    10     public static void main(String[] args) throws Exception {
    11         writeObject();//序列化对象
    12         readObject();//反序列化对象
    13     }
    14     public static void readObject() throws Exception{
    15         FileInputStream fis=new FileInputStream("c:\person.txt");
    16         //创建反序列化流 readObject() 读对象
    17         ObjectInputStream ois=new ObjectInputStream(fis);
    18         Object obj=ois.readObject();
    19         System.out.println(obj);
    20         ois.close();
    21     }
    22     public static void writeObject() throws Exception{
    23         FileOutputStream fos=new FileOutputStream("c:\person.txt");
    24         //创建写出对象的序列化的对象 构造方法传递字节输出流
    25         ObjectOutputStream oos=new ObjectOutputStream(fos);
    26         Demo1Person p=new Demo1Person("大冰",23);
    27         oos.writeObject(p);
    28         oos.close();
    29     }
    30 }
  • 相关阅读:
    LeetCode113. 路径总和 II
    LeetCode257. 二叉树的所有路径
    LeetCode222. 完全二叉树的节点个数
    LeetCode404. 左叶子之和
    LeetCode110. 平衡二叉树
    LeetCode101. 对称二叉树
    LeetCode100. 相同的树
    llustrator CC2017下载AI2020
    vs code 代码格式化整理
    人生格言
  • 原文地址:https://www.cnblogs.com/yanpingping/p/10611509.html
Copyright © 2020-2023  润新知