首页 > 解决方案 > 应用于基本类型的实例时,ObjectInput/OutputStream 和 DataInput/OutputStream 之间有什么区别?

问题描述

在我看来,ObjectInputStream/ObjectOutputStreamDataInputStream/DataOutputStream都可以应用于原始类型的实例。ObjectInputStream/ObjectOutputStreamDataInputStream/DataOutputStream当它们都适用于原始类型的实例时有什么区别?

它们都可以以相同的方式(反)序列化原始类型的实例吗?

标签: javaserializationio

解决方案


您可以通过快速测试轻松发现这一点:

import java.io.*;

public class Test {
    public static void main(String[] args) {
        try {
            ObjectOutputStream out1 = new ObjectOutputStream(new FileOutputStream("1.out"));
            out1.writeByte(100);
            out1.close();

            DataOutputStream out2 = new DataOutputStream(new FileOutputStream("2.out"));
            out2.writeByte(100);
            out2.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

当你运行这段代码时,你会直接看到不同之处:ObjectOutputStream 的文件更大。ObjectOutputStream 总共写入 7 个字节,而不是 DataOutputStream 正在写入的一个字节。

ObjectOutputStream 不仅仅是写入核心数据。它使用 Java 对象序列化流协议,可在https://docs.oracle.com/javase/7/docs/platform/serialization/spec/protocol.html#10258找到


推荐阅读