Почему 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);