首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当应用于原始类型的实例时,ObjectInput/OutputStream和DataInput/OutputStream之间有什么不同?

当应用于原始类型的实例时,ObjectInput/OutputStream和DataInput/OutputStream之间有什么不同?
EN

Stack Overflow用户
提问于 2019-05-19 10:55:48
回答 2查看 28关注 0票数 1

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

它们都能以相同的方式序列化原语类型的实例吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-19 13:09:06

注意:不使用序列化。另外,DataOutputStream也有一些奇怪的格式,所以也不要使用它。

DataOutputStream提供了一个OutputStream之上的层,它支持按Java类文件的要求格式化数据。它不添加任何标记/元数据,它只是以标准格式写入数据。它显然是早期编译器的一部分,因为它可能很有用--典型的JDK1.00类。

ObjectOutputStreamDataOutputStream上提供了一个支持编写包含任意对象数据的特定文件格式的层(不必用该类实现,但底层数据格式是相同的)。与大多数格式一样,这包括一组头文件。

当您将一个对象写到一个ObjectOutputStream时,它也会编写类描述或引用,如果它是从上一个reset开始使用的。指定"data“方法的格式与DataOutputStream非常相似,但该文件已经有了一个标头。这些方法通常用于defaultWriteObjectwriteFields之后的自定义writeFields方法中。

tl;博士有一个带有ObjectOutputStream的头;ObjectOutputStreamDataOutputStream上的一个(可渗透的)层。

票数 0
EN

Stack Overflow用户

发布于 2019-05-19 11:16:29

通过快速测试,你可以很容易地发现自己:

代码语言:javascript
复制
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对象序列化流协议

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56207091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档