在我看来,ObjectInputStream/ObjectOutputStream和DataInputStream/DataOutputStream都可以应用于基本类型的实例。当ObjectInputStream/ObjectOutputStream和DataInputStream/DataOutputStream都适用于原语类型的实例时,它们之间有什么区别?
它们都能以相同的方式序列化原语类型的实例吗?
发布于 2019-05-19 13:09:06
注意:不使用序列化。另外,DataOutputStream也有一些奇怪的格式,所以也不要使用它。
DataOutputStream提供了一个OutputStream之上的层,它支持按Java类文件的要求格式化数据。它不添加任何标记/元数据,它只是以标准格式写入数据。它显然是早期编译器的一部分,因为它可能很有用--典型的JDK1.00类。
ObjectOutputStream在DataOutputStream上提供了一个支持编写包含任意对象数据的特定文件格式的层(不必用该类实现,但底层数据格式是相同的)。与大多数格式一样,这包括一组头文件。
当您将一个对象写到一个ObjectOutputStream时,它也会编写类描述或引用,如果它是从上一个reset开始使用的。指定"data“方法的格式与DataOutputStream、非常相似,但该文件已经有了一个标头。这些方法通常用于defaultWriteObject或writeFields之后的自定义writeFields方法中。
tl;博士有一个带有ObjectOutputStream的头;ObjectOutputStream是DataOutputStream上的一个(可渗透的)层。
发布于 2019-05-19 11:16:29
通过快速测试,你可以很容易地发现自己:
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不仅仅是编写核心数据。它使用的是可在https://docs.oracle.com/javase/7/docs/platform/serialization/spec/protocol.html#10258上找到的Java对象序列化流协议
https://stackoverflow.com/questions/56207091
复制相似问题