#java #serialization
#java #сериализация
Вопрос:
Итак, я использую проприетарную библиотеку Java в проекте, к исходному коду которого у меня нет доступа.
Он выдает объект Message, и, очевидно, я не могу реализовать Serializable. Он генерируется во время выполнения.
какие у меня варианты? Есть ли способ сериализовать объект сообщения в массив байтов и обратно в объект?
ОБНОВЛЕНИЕ: я смог сериализовать объект в JSON (http://code.google.com/p/json-io /) но не смог преобразовать его обратно в объект, так как он возвращает null. Итак, я пытаюсь преобразовать его в массив байтов, используя приведенный ниже код. Все еще не работает.
public byte[] toByteArray (Object obj)
{
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
bytes = bos.toByteArray ();
}
catch (IOException ex) {
//TODO: Handle the exception
}
return bytes;
}
public Object toObject (byte[] bytes)
{
Object obj = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream (bytes);
ObjectInputStream ois = new ObjectInputStream (bis);
obj = ois.readObject();
}
catch (IOException ex) {
//TODO: Handle the exception
}
catch (ClassNotFoundException ex) {
//TODO: Handle the exception
}
return obj;
}
Комментарии:
1. Знаете ли вы, реализует ли объект Serializable? Если вы не знаете, вы можете просто попробовать, чтобы посмотреть, работает ли это.
2. он уже не реализует Serializable.
3. вы имеете в виду что-то вроде
public MyMessage extends 3rd.party.Message implements Serializable{}
?
Ответ №1:
Вы могли бы написать сериализуемую оболочку, в которой хранится все необходимое для воссоздания объекта Message.
Ответ №2:
XStream — один из способов.
Ответ №3:
Конечно, вы просто не можете использовать этот java.lang.Serializable
механизм.
Выберите любой формат: XML, JSON, буфер протокола или что-то еще, что может вам подойти.
Теперь вы несете ответственность за оба конца диалога: сериализацию и десериализацию.
Комментарии:
1. его буфер протокола, а не буфер прототипа.
2. Спасибо, я шел слишком быстро.
Ответ №4:
Если объект является Java bean, вы можете использовать java.beans.XMLEncoder
and java.beans.XMLDecoder
для сериализации.