Я знаю, что это не прямой ответ, но это гораздо лучшее решение. Вы должны сжать все ваши данные в байтовый массив с заданным форматом. Сериализация занимает много времени, и если вы знаете данные, которые вы отправляете, вам не нужно использовать такой неопределенный алгоритм, который занимает больше времени по сравнению с тем, чтобы выполнить сериализацию самостоятельно. На самом деле я не знаю, какие данные вы отправляете в классе Animal, но допустим, что вы отправляете вид (строковую переменную), возраст и логическое значение, представляющее, является ли животное полностью выращенным или нет.
class Animal {
/* Fields and Constructors here */
public static byte[] toByteArray(Animal a) {
byte[] arr = new byte[a.name.length() + 4 /*(length of array)*/ + 4 /*(the age)*/ + 1 /*(fully-grown)*/];
arr[0] = a.name.length() >> 24 & 0xff;
arr[1] = a.name.length() >> 16 & 0xff;
arr[2] = a.name.length() >> 8 & 0xff;
arr[3] = a.name.length() & 0xff;
for (int i = 0; i < a.name.length(); i++) {
arr[i + 4] = a.name.charAt(i);
}
arr[a.name.length() + 4] = a.age >> 24 & 0xff;
arr[a.name.length() + 5] = a.age >> 16 & 0xff;
arr[a.name.length() + 6] = a.age >> 8 & 0xff;
arr[a.name.length() + 7] = a.age & 0xff;
arr[a.name.length() + 8] = a.grown? 0x1 : 0x0;
}
}
То же самое можно сделать для десериализации, но в обратном порядке. Я не знаю, забыл ли я некоторые броски, но я уверен, что вы можете понять это :)