DoubleValue 和 FloatValue 实现
DoubleValue and FloatValue Implementation
我正在查看 Apache Flink 源代码并阅读 flink-core
模块。我不明白为什么 DoubleValue
和 FloatValue
没有实现 NormalizableKey
接口,但是 IntValue
实现了。
NormalizableKey
接口定义了生成固定长度的二进制前缀键,即字节序列的方法。前缀键的目的是直接比较原始字节上的值,而无需进行昂贵的对象反序列化。
对于 Integer
、Long
和 Short
等整数值,获取这样的固定长度前缀键是微不足道的。但是,浮点值(Float
、Double
)的二进制表示不同于整数值,它由三部分组成:指数、分数和符号位。由于这种表示,浮点值可以覆盖很大的值范围(以精度为代价)。无需反序列化即可比较的浮点值的二进制表示不像整数值那样易于定义。此外,规范化键最常见的用例是分组或连接。由于这些操作需要对象相等,因此它们不太常见于浮点值。
这就是为什么 FloatValue
和 DoubleValue
没有实现 NormalizableKey
接口的原因。规范化键有利于根据浮点值对数据进行排序。
我正在查看 Apache Flink 源代码并阅读 flink-core
模块。我不明白为什么 DoubleValue
和 FloatValue
没有实现 NormalizableKey
接口,但是 IntValue
实现了。
NormalizableKey
接口定义了生成固定长度的二进制前缀键,即字节序列的方法。前缀键的目的是直接比较原始字节上的值,而无需进行昂贵的对象反序列化。
对于 Integer
、Long
和 Short
等整数值,获取这样的固定长度前缀键是微不足道的。但是,浮点值(Float
、Double
)的二进制表示不同于整数值,它由三部分组成:指数、分数和符号位。由于这种表示,浮点值可以覆盖很大的值范围(以精度为代价)。无需反序列化即可比较的浮点值的二进制表示不像整数值那样易于定义。此外,规范化键最常见的用例是分组或连接。由于这些操作需要对象相等,因此它们不太常见于浮点值。
这就是为什么 FloatValue
和 DoubleValue
没有实现 NormalizableKey
接口的原因。规范化键有利于根据浮点值对数据进行排序。