【发布时间】:2015-09-19 17:41:44
【问题描述】:
我有一个只接受字符串作为键的缓存。此缓存是旧系统的一部分,我无法修改它们。要使用此缓存,我需要将缓存键转换为字符串。
为了使我的缓存键成为字符串,我使用 KRYO 对其进行序列化。将它们转换为bytes[] 并从bytes[] 中创建一个string。你觉得这样做有什么问题吗?我正在使用以下代码转换为bytes[]
获取字节 [] 使用 Kryo :-
final Kryo kyroInstance = serializerInstance.get();
kyroInstance.writeObject(output, target);
output.getBuffer();
使用 KRYO 读取如下密钥
final Kryo kyroInstance = serializerInstance.get();
Object obj = kyroInstance.readObject(input, type);
return obj;
我有 2 个问题 1. 你觉得这种方法好看吗?对于我的用例,您还有其他方法吗? 2. 在分布式环境中读取密钥时有时会出现 NPE 错误,并且该问题特定于 KRYO 序列化。
java.lang.IndexOutOfBoundsException: Index: 34120126, Size: 0 at
java.util.ArrayList.rangeCheck(ArrayList.java:653) at
java.util.ArrayList.get(ArrayList.java:429) at
com.esotericsoftware.kryo.util.MapReferenceResolver.getReadObject(MapReferenceResolver.java:42)
at com.esotericsoftware.kryo.Kryo.readReferenceOrNull(Kryo.java:830)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:680)
【问题讨论】:
-
如何创建字符串?您的示例中没有字符串对象。你能提供一个包含方法 String createKeyString(Object key) 的例子吗?
-
@cruftex 我使用以下代码创建字符串 String Key =new String(bytes[]);
标签: java jakarta-ee caching hazelcast kryo