所以我在一个项目中使用专有的java库,我无法访问源代码。
它抛出一个Message对象,显然我无法实现Serializable。它是在整个运行时生成的。
我的选择是什么?有没有办法将Message对象序列化为字节数组并返回到对象中?
更新:我能够将对象序列化为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;
}
答案 0 :(得分:3)
您可以编写一个可序列化的包装器,并存储重新创建Message对象所需的所有内容。
答案 1 :(得分:2)
当然,你不能使用java.lang.Serializable
机制。
选择任何格式:XML,JSON,protocol buffer或其他可能适合您的格式。
现在你要对会话的两端负责:序列化和反序列化。
答案 2 :(得分:2)
XStream是一种方法。
答案 3 :(得分:1)
如果对象是Java bean,则可以使用java.beans.XMLEncoder
和java.beans.XMLDecoder
进行序列化。