我想使用Java客户端
为aerospike写一个map binbin应该最终看起来像
{2890:0.75}
这是我的代码
HashMap<String, String> newMap = new HashMap<String, String>();
JsonArray infArray = jsonData.get("inferences").getAsJsonArray();
for (int i = 0; i < infArray.size(); i++) {
JsonObject currentInference = infArray.get(i).getAsJsonObject();
String attrId = currentInference.get("attributeId").getAsString();
String weight = currentInference.get("weight").getAsString();
newMap.put(attrId, weight);
}
Bin infBin = new Bin("inferences", Value.get(newMap));
client.put(null, key, infBin);
问题是,当我将bin编写为aerospike时,数据已损坏或可能被编码。
例如地图
(inferences:{0=0, 2890=0.75})
正在转换为
AC ED 00 05 73 72 00 11 6A 61 76 61 2E 75 74 69 6C 2E 48 61 73 68 4D 61 70 05 07 DA C1 C3 16 60 D1 03 00 02 46 00 0A 6C 6F 61 64 46 61 63 74 6F 72 49 00 09 74 68 72 65 73 68 6F 6C 64 78 70 3F 40 00 00 00 00 00 0C 77 08 00 00 00 10 00 00 00 02 74 00 04 33
我不确定为什么会这样。任何帮助都会有很大帮助,因为我完全陷入了这个问题。提前致谢
EDIT1:
现在,有一些有趣的事情发生了。
我将上面的代码修改为
Bin infBin = new Bin("inferences", Value.getAsMap(newMap));
还修改了HashMap以使用Integer和Double,如下所示
HashMap<Integer, Double> newMap = new HashMap<Integer, Double>();
JsonArray infArray = jsonData.get("inferences").getAsJsonArray();
for (int i = 0; i < infArray.size(); i++) {
JsonObject currentInference = infArray.get(i).getAsJsonObject();
Integer attrId = currentInference.get("attributeId").getAsInt();
Double weight = currentInference.get("weight").getAsDouble();
newMap.put(attrId, weight);
}
Bin infBin = new Bin("inferences", Value.get(newMap));
client.put(null, key, infBin);
现在地图的第一个关键是正确地写入了空中加速器。但价值仍然存在问题。
然后我再次修改代码以使用Float而不是Double。然后两个正确写入的地图正确写入正确没有任何问题。但价值仍然存在问题。
然后作为最后的尝试,我将Float也修改为Integer,然后尝试将airospike正确更新,没有任何问题。这是否意味着airospike Java客户端不支持Double和Float?