Java进阶之反序列化输入ObjectInputStream:用法实例(一百八十六)

#『AI先锋杯·14天征文挑战第4期』#

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者

博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏: Audio工程师进阶系列原创干货持续更新中……】🚀
Android多媒体专栏: 多媒体系统工程师系列原创干货持续更新中……】🚀
推荐1:车载系统实战课:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
推荐2:HIDL与AIDL实战课:Android14 Binder之HIDL与AIDL通信实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🌻1. 前言

本篇目的:Java序列化之ObjectInputStream:用法实例

🌻2. Java序列化ObjectInputStream介绍

  1. 基本概念
    ObjectInputStream是Java提供的对象反序列化输入流,用于将字节流恢复为原始对象,与ObjectOutputStream配对使用。

  2. 功能
    提供readObject、readInt、readUTF等方法,支持读取对象、基本类型、字符串,自动解决对象图与循环引用。

  3. 使用限制
    字节流需由ObjectOutputStream生成;类路径必须一致;serialVersionUID需匹配;静态与transient字段需手动处理。

  4. 性能特性
    基于字节流直接构造对象,速度中等;可通过readResolve优化单例。

  5. 使用场景
    对象持久化恢复、网络接收、深拷贝还原、缓存加载。

🌻3. 代码实例

🌻3.1 使用ObjectInputStream从文件恢复对象
  1. 应用场景
    读取磁盘保存的对象。

  2. 用法实例

    import java.io.*;
    
    class User implements Serializable {
        private static final long serialVersionUID = 1L;
        String name;
        int age;
    }
    
    public class LoadDemo {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.dat"))) {
                User u = (User) ois.readObject();
                System.out.println(u.name + " " + u.age);
            }
        }
    }
    

    输出:
    Alice 20

🌻3.2 使用ObjectInputStream通过Socket接收对象
  1. 应用场景
    服务端读取客户端发送的消息。

  2. 用法实例

    import java.io.*;
    import java.net.*;
    
    class Message implements Serializable {
        String text;
    }
    
    public class ReceiveDemo {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            try (ServerSocket ss = new ServerSocket(9000);
                 Socket s = ss.accept();
                 ObjectInputStream ois = new ObjectInputStream(s.getInputStream())) {
                Message m = (Message) ois.readObject();
                System.out.println(m.text);
            }
        }
    }
    

    输出:
    hello

🌻3.3 使用ObjectInputStream实现深拷贝还原
  1. 应用场景
    通过反序列化获得独立对象副本。

  2. 用法实例

    import java.io.*;
    
    class Data implements Serializable {
        int value;
    }
    
    public class DeepCloneReadDemo {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            byte[] bytes = ...; // 由ObjectOutputStream生成
            ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
            Data copy = (Data) ois.readObject();
            System.out.println(copy.value);
        }
    }
    

    输出:
    42

🌻3.4 序列化ObjectInputStream总结

关键词功能描述典型应用
ObjectInputStream对象反序列化输入流文件恢复、网络接收、深拷贝
readObject读取对象自动还原对象图
readResolve单例保护避免重复实例化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android系统攻城狮

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值