Java LevelDB的默认比较器
我正在使用LevelDB 我想提供一个数字(整数)键,并能够按照该键的顺序迭代db。我遇到的困难是理解LevelDb的默认比较器实际上是如何工作的,以及我如何将int编码成Java LevelDB的默认比较器,java,c++,bit-manipulation,leveldb,Java,C++,Bit Manipulation,Leveldb,我正在使用LevelDB 我想提供一个数字(整数)键,并能够按照该键的顺序迭代db。我遇到的困难是理解LevelDb的默认比较器实际上是如何工作的,以及我如何将int编码成字节[],从而让默认比较器按照该int正确排序 LevelDb doco声明: 前面的示例使用了键的默认排序函数, 按字典顺序排列字节 我已经在谷歌上搜索过了,但对于如何将int编码成按字典顺序排列的字节,我感到困惑 注意:如果我提供自己的比较器,它将使迭代时间大约增加一倍,因为现在所有的比较都必须在JNI边界上来回跳转,所以
字节[]
,从而让默认比较器按照该int
正确排序
LevelDb doco声明:
前面的示例使用了键的默认排序函数,
按字典顺序排列字节
我已经在谷歌上搜索过了,但对于如何将int
编码成按字典顺序排列的字节,我感到困惑
注意:如果我提供自己的比较器,它将使迭代时间大约增加一倍,因为现在所有的比较都必须在JNI边界上来回跳转,所以我不想这样做。此编码工作:
public synchronized static byte[] encode(int key) {
encoded[0] = (byte)(key >> 24);
encoded[1] = (byte)(key >> 16);
encoded[2] = (byte)(key >> 8);
encoded[3] = (byte)(key);
return encoded;
}
看起来leveldb在字符串上工作,并且它们是有序的。您可以尝试的一件事是将整数转换为字符串,并且该字符串以整数的总位数作为前缀。例如,0-9编码为10-19。10-99编码为210-299。100-999编码为3100-3999,以此类推。