Почему ObjectOutputStream записывает 14 байтов вместо 8 с DataOutputStream?

Один и тот же метод (writeInt ()) в ObjectOutputStream и DataOutputStream записывает разные данные? Разве это не должно быть равным для примитивных типов?

        // 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();

Например, я хотел отправить информацию об объектах при первом подключении с помощью метода writeObject () объекта outputstream, а затем отправить x, y с плавающей запятой с помощью writeInt () OOS.

1 ответ

Решение

ObjectOutputStream предназначен для записи объектов и записи некоторых метаданных при записи любой информации, включая примитивы.

Кроме того, OOS буферизуется, поэтому вы можете не увидеть все байты, записанные сразу в основной поток.

Примечание: writeInt использует 4 байта с DataOutputStream.

отправить x, y плавает в цикле с writeOnt() OOS

Я предлагаю вам использовать writeFloat(f) для записи чисел с плавающей точкой.

Если у вас есть массив с плавающей точкой, я предлагаю вам использовать writeObject(), например

oos.writeObject(someShape);
oos.writeObject(floatArray);
Другие вопросы по тегам