为什么 ObjectOutputStream 写入 14 个字节而不是 DataOutputStream 的 8 个字节?

Why does ObjectOutputStream write 14 bytes instead of 8 with DataOutputStream?

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 个字节。

send x, y floats in loop with OOS's writeInt()

我建议你使用 writeFloat(f) 来写浮点数。

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

oos.writeObject(someShape);
oos.writeObject(floatArray);