gpt4 book ai didi

java - Jython 中的 HBase Bytes.toString(byte[] b) 结果无效

转载 作者:行者123 更新时间:2023-12-02 07:57:19 25 4
gpt4 key购买 nike

想知道我在这里做错了什么。在 Java 1.5 上使用 Jython 2.2.1 和 Hbase 0.90。无法获取 Bytes.toString(byte[] b)上类。它返回看起来像地址的内容。但是当我使用重载的 Bytes.toString(byte[] b, int off, int len) 时,它返回正确的结果。

g = Get(Bytes.toBytes(id))
res = self.table.get(g)

t = res.getValue(Bytes.toBytes('stuff'), Bytes.toBytes('t'))
print Bytes.toString(t) // returns stuff like '[B@12121212'
print Bytes.toString(t, 0, len(t)) // returns the string properly

有人见过这个吗?

最佳答案

你没有做错任何事。我在 Java 1.8 和 HBase 1.2.4 上运行 Jython 2.7,并且遇到了完全相同的行为。似乎正在发生以下情况:Java 支持接受不同参数集的多个同名方法,因此 Jython 在内部必须消除接受不同参数的多个同名方法之间的歧义。正在转换为字符串的 Byte[] 数组表示为 Python 数组或其某个子类,它具有接受一个参数(self)的 toString() 方法。 'Bytes' 对象是其子类,具有 Python array.toString(self) 方法和 Java .toString(final [] byte b) 和 .toString(final [] byte b, int off, int len )方法。

一定是 Bytes 对象的构造方式导致 Python 的 .toString(self) 取代了 Java 的 .toString(final [] byte b) 但另一种方法仍然有效,因为没有 Python .toString( ) 方法三个参数取代其他 Java .toString( )。 (参见https://docs.python.org/2.7/library/array.html?highlight=tostring#array.array.tostring)

解决方案:修改导入并添加几行额外代码可以解决此问题。

import org.apache.hadoop.hbase.util.Bytes as BrokenBytes
class Bytes(BrokenBytes):
@staticmethod
def toString( x ): return( BrokenBytes.toString( x, 0, len( x ) ) )

关于java - Jython 中的 HBase Bytes.toString(byte[] b) 结果无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com