为什么 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);
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);