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 - 使用 Mockito 进行单元测试需要哪些导入?

java - 无法添加 ActionListener 来添加组件

java - 带有字符 g.draw java 的轮廓形状

linux - 同时捕获两个不同端口上的网络流量

java - 套接字 ObjectOutpuStream ObjectInputStream

java - Spring Boot 应用程序无法使用 JspTagLib 和 Freemarker 找到 security.tld

javascript - Express 应用程序不响应外部流量

elasticsearch - 如何从远程计算机连接到 Elasticsearch 服务器?

java - 追加到 ObjectOutputStream(写入多个对象而不关闭流)

java - 通过 ObjectOutputStream 发送相同但已修改的对象