我在用 org.apache.hadoop.hbase.util.Bytes.toBytes(T)
. 我将这个函数的输出存储在hbase中的一个值中,然后我想对它使用比较操作( CompareOp.GREATER
, CompareOp.LESS
...).
输出 Bytes.toBytes(T)
保持这些类型的“可比性”?我的意思是 double
例如:
double d1 = ..., d2 = ...;
Bytes.compare(Bytes.toBytes(d1), Bytes.toBytes(d2)) == Double.compare(d1, d2)
这是否适用于这些类型? float
/
double int
/ long
String BigDecimal
1条答案
按热度按时间l7wslrjt1#
如果在比较之前转换回java数据类型,那么是的。hbase存储二进制数据。如果将这个二进制文件转换为java数据类型,那么输出值将与输入值和
compare
函数将比较解码为适当数据类型的值。如果你使用
Bytes.compare
,则这不一定成立,因为这些值是基于它们的二进制顺序进行比较的,而不是基于它们的解码值。值得注意的是,bigdecimal不是原始数据类型,而是一个包含两个组件的类:
任意精度整数未标度值和32位整数标度。
根据精确的二进制编码
Bytes.compare
结果可能不匹配BigDecimal.compare
因为bytes函数比较原始二进制数据,而bigdecimal比较解码值。同样适用于
int
比较。负int有点1
而正整数有一个符号位0
. 因此Bytes.compare
将负数视为大于正数。