java - 应用于基本类型的实例时,ObjectInput/OutputStream 和 DataInput/OutputStream 之间有什么区别?
问题描述
在我看来,ObjectInputStream
/ObjectOutputStream
和DataInputStream
/DataOutputStream
都可以应用于原始类型的实例。ObjectInputStream
/ObjectOutputStream
和DataInputStream
/DataOutputStream
当它们都适用于原始类型的实例时有什么区别?
它们都可以以相同的方式(反)序列化原始类型的实例吗?
解决方案
您可以通过快速测试轻松发现这一点:
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找到
推荐阅读
- clojure - 结合'let'和'letfn'
- apache-spark - 如何对pyspark中的数据帧进行算术运算?
- javascript - React Context - 如何检测哪个组件正在调用上下文?
- excel - 将 VBA 与表一起使用
- python - 在 excel 中正确显示 .csv
- google-cloud-platform - 如何在 Cloud Build 中运行 beta gcloud 组件,例如“gcloud beta artifacts docker images scan”?
- delphi - 在德尔福等待两个事件的最佳方式
- ruby-on-rails - 在 Rails 应用程序中在哪里设置条带 API 密钥?
- powershell - 将 CSV 中的文件路径修剪为存储在变量中的某个路径/文件名
- twilio - twilio 中聚集语音中的多种口音语言