亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

掌握 Java ObjectInputStream:反序列化对象完全指南

Java ObjectInputStream 类

ObjectInputStream 位于 java.io,用于反序列化由 ObjectOutputStream 写入的对象。继承抽象 InputStream。


ObjectInputStream 工作原理

序列化将 Java 对象转为字节流以存储或传输。反序列化由 ObjectInputStream 完成,读取字节流重建原对象。


创建 ObjectInputStream

导入类后关联源(通常为 FileInputStream):

// 关联文件
FileInputStream fileStream = new FileInputStream("example.dat");
// 包装为 ObjectInputStream
ObjectInputStream objStream = new ObjectInputStream(fileStream);

实例化后可从文件读取序列化对象。


ObjectInputStream 关键方法


示例 1:基础反序列化

写入整数和字符串到文件,再读回:

import java.io.*;
public class Main {
    public static void main(String[] args) {
        int data1 = 5;
        String data2 = "This is programiz";
        try {
            // 写数据
            FileOutputStream fos = new FileOutputStream("file.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeInt(data1);
            oos.writeObject(data2);
            // 读数据
            FileInputStream fis = new FileInputStream("file.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            System.out.println("Integer data :" + ois.readInt());
            System.out.println("String data :" + ois.readObject());
            oos.close();
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出

Integer data :5
String data :This is programiz

示例 2:反序列化自定义对象

序列化并反序列化 Dog 对象。类必须实现 Serializable。

import java.io.*;
class Dog implements Serializable {
    String name;
    String breed;
    Dog(String name, String breed) {
        this.name = name;
        this.breed = breed;
    }
}
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Tyson", "Labrador");
        try {
            // 序列化
            FileOutputStream fos = new FileOutputStream("file.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(dog);
            // 反序列化
            FileInputStream fis = new FileInputStream("file.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Dog newDog = (Dog) ois.readObject();
            System.out.println("Dog Name: " + newDog.name);
            System.out.println("Dog Breed: " + newDog.breed);
            oos.close();
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出

Dog Name: Tyson
Dog Breed: Labrador

关键点:


ObjectInputStream 其他方法

方法描述
available()返回无阻塞可读字节数
mark()标记流当前位置
reset()重置到最近标记位置
skipBytes(int n)跳过 n 字节
close()关闭流释放资源

深入见 官方 Java 文档。

java

  1. 深入理解 Java final 关键字:变量、方法与类的不可变性
  2. Java instanceof 运算符完全指南:用法、继承与接口检查
  3. 精通 Java 继承:核心概念、类型与实战示例
  4. 深入理解 Java 静态嵌套类:用法、差异与实战示例
  5. 精通 Java 匿名内部类:定义、语法与实战示例
  6. Java 单例模式详解:安全实现与使用指南
  7. 精通 Java 反射:运行时检查类、方法与字段
  8. 精通 Java ArrayList:操作、方法与最佳实践
  9. Java Stack 类全面指南:用法、核心方法与实战示例
  10. 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
  11. 掌握 Java 泛型:构建可复用、类型安全的代码
  12. 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除