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

时间:2018-06-04 07:50:07

标签: java networking objectoutputstream 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浮动循环。

1 个答案:

答案 0 :(得分:1)

ObjectOutputStream旨在编写对象并在编写包括基元在内的任何信息时写入一些元数据。

OOS也是缓冲的,因此您可能看不到在基础流中立即写入的所有字节。

注意:writeInt使用4个字节和DataOutputStream。

  

使用OOS的writeInt()

发送x,y浮动循环

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

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

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