Java:如何序列化第三方库生成的Java Object?

时间:2011-10-19 11:51:14

标签: java serialization

所以我在一个项目中使用专有的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;
}

4 个答案:

答案 0 :(得分:3)

您可以编写一个可序列化的包装器,并存储重新创建Message对象所需的所有内容。

答案 1 :(得分:2)

当然,你不能使用java.lang.Serializable机制。

选择任何格式:XML,JSON,protocol buffer或其他可能适合您的格式。

现在你要对会话的两端负责:序列化和反序列化。

答案 2 :(得分:2)

XStream是一种方法。

答案 3 :(得分:1)

如果对象是Java bean,则可以使用java.beans.XMLEncoderjava.beans.XMLDecoder进行序列化。