【发布时间】:2017-01-09 13:18:53
【问题描述】:
是否有任何标准方式或任何实用程序库来读取/浏览序列化(通过 ObjectOutputStream)对象的属性?
我要解决的问题是升级使用 ObjectOutputStream(旧版)序列化并存储在数据库中的数据。在我的例子中,一些内部字段被彻底改变和重命名。我无法使用 ObjectInputStream 读回对象,因为更改字段的值会丢失(设置为 null)。
特别是将来可能需要再次升级它,所以如果我可以用 XML 序列化替换以这种方式存储的旧数据会更好。但是完成这项任务的一般方法需要遍历属性(它们的名称、类型和值)。我无法找到从序列化数据中读取此类元数据的标准方法(例如,jackson 库可以将 JSON 读取为对象或属性和映射的映射,您可以轻松操作它们)。
是否有任何低级库来处理数据,用 ObjectOutputStream 序列化?结果输出看起来像是包含有关序列化字段名称及其类型的信息。作为最后的手段,我可以整理格式,但我认为已经有人可以做到这一点,但我自己却找不到任何库。
例如,我有一堂课
public class TestCase implements Serializable
{
int id;
double doubleValue;
String stringValue;
public TestCase(int id, double doubleValue, String stringValue)
{
this.id = id;
this.doubleValue = doubleValue;
this.stringValue = stringValue;
}
}
改成
public class TestCase implements Serializable
{
ComplexId id;
double doubleValue;
String stringValue;
public TestCase(ComplexId id, double doubleValue, String stringValue)
{
this.id = id;
this.doubleValue = doubleValue;
this.stringValue = stringValue;
}
}
class ComplexId implements Serializable
{
int staticId;
String uuid;
public ComplexId(int staticId, String uuid)
{
this.staticId = staticId;
this.uuid = uuid;
}
}
升级值本身不是问题,我只是不知道如何偷看它并放回一个新的(具有新类型)而无需自定义实现序列化/反序列化协议(这是最后的手段)我)。
【问题讨论】:
标签: java serialization objectoutputstream