我有一个只接受字符串作为键的缓存。此缓存是遗留系统的一部分,我无法修改它们。要使用此缓存,我需要将缓存密钥转换为字符串。
要使我的缓存键变为字符串,请使用KRYO对其进行序列化。将它们转换为bytes[]
并从string
创建bytes[]
。你看到这样做有什么问题吗?我使用以下代码转换为bytes[]
获取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)
答案 0 :(得分:1)
正如您在评论中所述,您可以通过以下方式构建密钥字符串:
String key =new String(byte[]);
这有以下问题:
要创建String,它会将输入解释为字节编码字符。使用的编码或在这种情况下的解码由默认字符集设置确定。这可能会根据您的环境而改变。
您的输入是任意字节流。并非每个字节序列在字符编码中都是合法的。请参阅方法评论:
未指定给定字节在默认字符集中无效时此构造函数的行为。
简而言之:远离这个构造函数。
出于您的目的,您可以使用,例如: