2

我目前正在开发一个 Web 应用程序,我想让 java 对象在服务器上持久化,以便可以随时检索它们。由于数据库对我的应用程序来说太过分了,所以我选择了最简单的持久化 java 对象的方法:序列化为 xml 或字节。不幸的是,我使用的大部分代码是我无法修改的 java 类,并且这些类没有实现接口“可序列化”。关于序列化这些类的对象以及我自己的类的其他交互对象,我有哪些选择?

4

3 回答 3

1

正如我在评论中所说,我会选择一个SerializationService适合Serializer<T>您要保存的每个对象的方法。

就像是 :

public interface Serializer<T> {

Serializable toSerializable(T objectToSerialize);

//to build a factory/service around it
boolean canDeserialize(Serializable serializedObject);

T fromSerializable(Serializable serializedObject);

}

如果您想要一个基本的具体示例:使用非常常见的路径:

public class PathSerializer implements Serializer<Path> {

@Override
public Serializable toSerializable(Path objectToSerialize) {
    return objectToSerialize.toString();
}

@Override
public Path fromSerializable(Serializable serializedObject) {
    if(!canDeserialize(serializedObject)){
        throw new IllegalArgumentException("Cannot deserialize this");
    }
    return Paths.get((String)serializedObject);
}

@Override
public boolean canDeserialize(Serializable serializedObject) {
    return serializedObject != null && serializedObject instanceof String;
}

}

您还可以很好地存储 POJO,其中包含原始对象类的名称和其构造函数中所需的参数列表和/或其字段的映射,以便能够通过反射重新生成您的对象。

这完全取决于您和您的应用程序的复杂性。

于 2017-02-22T13:42:53.187 回答
0

一种选择是扩展您无权访问的类,以保存它们的内部状态,并在它们上实现 Serializable。

有关此 SO 问题的更多信息: 序列化不实现可序列化的类变量

除此之外,我认为除了构建一些包装器并将类手动序列化为 XML 或 JSON 之外,没有其他选择。

于 2017-02-21T16:32:34.200 回答
0

我认为 JSON 将是这里的首选解决方案。以Google 的 GSON库为例。你不需要注释你的类,只需写

Gson gson = new Gson();
MyObj obj = gson.fromJson(jsonString);
String json = gson.toJson(obj);

有关 JSON 格式的更多一般信息,请参阅官方 JSON 文档

于 2017-02-21T16:32:01.470 回答