IO中的序列化和反序列化

IO中的序列化和反序列化

序列化:

  • 概念
    • 把 java 对象转成字节序列的过程

反序列化:

  • 概念
    • 街字节序列化转换成 java 对象的过程

对象序列化的作用:

  1. 持久化:把对象的字节序列永久的保存在硬盘中,通常放在一个文件中
  2. 网络通信化:在网络上传送对象的字节序列化,比如:服务器之间的数据通信、对象传递

序列化和反序列化的使用:

  • 序列化:
    • ObjectOutPutStream(java.io.ObjectOutputStream):代表对象的输出流,进行序列化
      • 它的 writeObject(Object obj) 方法可对参数指定的obj对象进行序列化,将得到的序列化写入到一个目标输入流中
  • 反序列化:
    • ObjectInputStream (java.io.ObjectInputStream):代表对象的输入流,进行反序列化
      • 它的 readObject() 方法从一个源输入流中读取字节序列,再将它们返回成为一个对象,并将其返回

注意:

  • 只有实现了 Serializable(java.ioSerializable ) 接口的类才能被序列化,Serializable 接口是一个空接口,只起到标记作用
    • Serializable 接口是启用其序列化功能的接口。实现java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任意状态被序列化或逆序列化。 —百度解释
    • serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。
      • serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。

IO中的序列化和反序列化实列

主要代码类
package text.ling.io;

import text.ling.seria.TwentiethDemoSerializable;

import java.io.*;

/**
 * @Package: text.ling.io
 * @ClassName: TwentiethDemo
 * @Author: Ling
 * @Date: 2021/2/6 16:46
 * @Description:通过对象流操作对象
 * 将对象序列化到文件: ObjectOutputStream 可以将一个内存中的 java 对象通过序列化写入到磁盘的文件
 * 序列化的必须实现 Serializable 序列化接口
 * TwentiethDemoSerializable.class  对象类,包含了一些对象实例的基本属性
 */
public class TwentiethDemo {
    public static void main(String[] args) {
//        oos();
        ois();
    }

    /**
     * 写入到文件中
     * 将 Java 对象序列化到文件(内存)中
     * @return
     */
    public static void oos(){
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("F:\\JavaIo\\object\\Serializable.txt"));
            TwentiethDemoSerializable ts = new TwentiethDemoSerializable();
            ts.setUserid(1);
            ts.setUsername("甲一");
            ts.setPassword("123456");
            oos.writeObject(ts);
            oos.flush();
            System.out.println("完成");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 从文件中读取出来
     * 将对象反序列化到内存中
     * @return
     */
    public static void ois(){
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream("F:\\JavaIo\\object\\Serializable.txt"));
            TwentiethDemoSerializable ts = (TwentiethDemoSerializable) ois.readObject();
            System.out.println("编号:"+ts.getUserid()+" 姓名:"+ts.getUsername()+" 密码:"+ts.getPassword());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                ois.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

对象类(TwentiethDemoSerializable.class)
package text.ling.seria;

import java.io.Serializable;

/**
 * @Package: text.ling.seria
 * @ClassName: TwentiethDemoSerializable
 * @Author: Ling
 * @Date: 2021/2/6 16:50
 * @Description:
 */
public class TwentiethDemoSerializable implements Serializable {
    private int userid;
    private String username;
    private String password;

    public TwentiethDemoSerializable() {
    }

    public TwentiethDemoSerializable(int userid, String username, String password) {
        this.userid = userid;
        this.username = username;
        this.password = password;
    }

    public int getUserid() {
        return userid;
    }

    public void setUserid(int userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "TwentiethDemoSerializable{" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

以上为本人总结,如果更深的研究奉上大佬文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值