我有一个缓存,它只接受字符串作为键。这个缓存是遗留系统的一部分,我不能修改它们。要使用这个缓存,我需要将缓存键转换为字符串。
若要使缓存键成为字符串,请使用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.在读取分布式环境中的键时,经常会出现错误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)发布于 2015-07-05 15:35:20
正如您在注释中所述,您通过以下方法构造键字符串:
String key =new String(byte[]);这有以下问题:
当给定字节在默认字符集中无效时,此构造函数的行为未指定。
简而言之:远离这个构造函数。
为了您的目的,您可以使用,例如:
https://stackoverflow.com/questions/31180411
复制相似问题