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, SomeClass> 中。 ? - 字符串/长。我从 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();
我有一个存储 Long 值和 JSONArray 的 class。
Class SomeClass {
private Long longValue;
private JSONArray jsonArray;
//Default and parameterised constructors.
//Getters and Setters.
}
我将这些值存储在 NavigableMap, SomeClass> 中。 ? - 字符串/长。我从 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();