org.mapdb.DBException使用 ELSA 序列化在 MapDB 中存储 JSONArray 时出现 $SerializationError

org.mapdb.DBException$SerializationError when storing JSONArray in MapDB using ELSA Serialization

我有一个存储 Long 值和 JSONArray 的 class。

Class SomeClass {
    private Long longValue;
    private JSONArray jsonArray;
    //Default and parameterised constructors.
    //Getters and Setters.
}

我将这些值存储在 NavigableMap 中。 ? - 字符串/长。我从 MapDB 得到一个 treeMap 如下:

private DB mapDB = MapDBUtil.getMapDB(); //Opening or creating and getting MapDB DB object
NavigableMap<Long,SomeClass> treeMap = mapDB.treeMap(treeName).keySerializer(Serializer.LONG).valueSerializer(Serializer.ELSA).createOrOpen();

当我尝试向获得的地图添加一些值时,请说:

SomeClass instance = new SomeClass("Hello", jsonArray);
treeMap.put("test", instance);

我得到 org.mapdb.DBException$SerializationError。我认为问题是由于序列化 JSONArray 引起的。我想实现自定义序列化程序或使用其他方式序列化和存储此数据。我尝试在 'SomeClass' 中实现 Serializable 和 ElsaSerializer,但这两个似乎都不起作用。我还尝试在实现可序列化接口时使用 Serializer.JAVA 但这也不起作用。我不确定我做错了什么。任何帮助将不胜感激。

我最终通过实现自定义序列化程序并按如下方式使用它来修复它:

Class SomeClassSerialzer extends GroupSerializerObjectArray<SomeClass> {
@Override
    public void serialize(DataOutput2 dataOutput2, SomeClass someClass) throws IOException {
        dataOutput2.writeLong(someClass.getLong());
        dataOutput2.writeUTF(threatSourceData.getJSONArray().toString());
    }

    @Override
    public SomeClass deserialize(DataInput2 dataInput2, int i) throws IOException {
        JSONArray jsonArray = null;
        Long longValue = dataInput2.readLong();
        try {
            categories = new JSONArray(dataInput2.readUTF());
        } catch (JSONException ignored) {
        }
        return new SomeClass(reputation, categories);
    }
}

从MapDB获取BTreeMap时,使用SomeClassSerialzer如下:

NavigableMap<Long,SomeClass> treeMap = mapDB.treeMap(treeName).keySerializer(Serializer.LONG).valueSerializer(new ThreatSourceDataSerializer()).createOrOpen();