Java 为什么ObjectOutputStream使用DataOutputStream写入14字节而不是8字节?

Java 为什么ObjectOutputStream使用DataOutputStream写入14字节而不是8字节?,java,networking,objectoutputstream,dataoutputstream,Java,Networking,Objectoutputstream,Dataoutputstream,ObjectOutputStream和DataOutputStream中的相同方法(writeInt())写入不同的数据?对于基本类型,它不应该是相等的吗 // Output: 14 bytes file ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file_14bytes.bin")); out.writeInt(1); out.wri

ObjectOutputStream和DataOutputStream中的相同方法(writeInt())写入不同的数据?对于基本类型,它不应该是相等的吗

        // Output: 14 bytes file
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file_14bytes.bin"));
        out.writeInt(1);
        out.writeInt(2);
        out.close();

        // Output: 8 bytes file
        DataOutputStream dout= new DataOutputStream(new FileOutputStream("file_8bytes.bin"));
        dout.writeInt(3);
        dout.writeInt(4);
        dout.close();

例如,我想使用objectoutputstream的writeObject()方法在第一次连接时发送对象信息,然后使用OOS的writeInt()在循环中发送x,y浮动。

objectoutputstream设计用于在写入包括原语在内的任何信息时写入对象和一些元数据

此外,OOS是缓冲的,因此您可能看不到在底层流中立即写入的所有字节

注意:writeInt与DataOutputStream一起使用4个字节

发送x,y在OOS的writeInt()的循环中浮动

我建议您使用writeFloat(f)来编写浮动

如果您有一个浮点数组,我建议您使用writeObject(),例如


ObjectOutputStream
是您想要使用Java序列化的时候(由于几个原因,包括安全考虑,这有点不鼓励)
DataOutputStream
是指您希望完全控制写入每个字节的方式。从你的问题来看,你想用后者。
oos.writeObject(someShape);
oos.writeObject(floatArray);