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

标签 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 float 。

最佳答案

ObjectOutputStream 旨在写入对象,并在写入任何信息(包括基元)时写入一些元数据。

此外,OOS 也会进行缓冲,因此您可能看不到立即写入底层流中的所有字节。

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

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

我建议你使用 writeFloat(f) 来写入 float 。

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

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

关于java - 为什么ObjectOutputStream写入14个字节而不是DataOutputStream写入8个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50675733/

相关文章:

java - 接收ObjectInputStream时出错

java - 将图像数组传递到下一个屏幕

java - Kinect API 仅用 Java 编写,没有 native 功能?

c++ - WinSock c++ inet_ntop 总是显示 204.204.204.204(并且 accept() 没有失败)

java - 使用 j2me 发送数据报

TCP 上的 Java 可序列化安全性

Java - 将类作为参数传递以进行比较

java - 递归求解随机迷宫

Java Socket/Serversocket WAN 连接

JAVA通过网络发送Scribble