2

python 是否与Byte.MAX_VALUE代表最大字节的 java 等价?我看了一下 pythonsys模块,我只找到了sys.maxint. 它有类似的东西sys.maxbyte吗?

更新:

就我而言,我正在进行 Hbase Rowkey 扫描,我的 rowkey 看起来像 rk1_rk2。为了在不知道确切 rk2 的情况下扫描 rk1 的所有结果,我的 java 代码如下所示:

byte[] startRowBytes = "rk1".getBytes(); 
byte[] endRowBytes = ("rk1" + (char) Byte.MAX_VALUE).getBytes(); 

HbaseScanQuery query = new   HbaseScanQuery(tableName, colFamily);
query.setStartRow(startRowBytes).setStopRow(endRowBytes);

我只是想弄清楚 Byte.MAX_VALUE 部分的 python 等价性。

4

2 回答 2

3

我认为你必须自己定义价值。一个字节有 2^8 = 256 个唯一状态,因此它可以表示的最大整数是 255。然而,java 的字节类型是有符号字节,所以一半状态保留用于正数(和 0),另一半用于对于底片。因此java的Byte.MAX_VALUE的等价物是127,java的Byte.MIN_VALUE的等价物是-128

由于 python 字节是无符号的,因此 java 的 Byte.MIN_VALUE 的等价物将是 128,这是 2 的补码表示法(表示有符号整数的事实上的标准)中 -128 的表示,这要感谢 Ignacio Vazquez-Abrams 指出这一点。

我有一段时间没有处理 python,但我相信你想要的是 ("rk1"+chr(127))

于 2013-01-15T14:23:17.883 回答
1

鉴于您的更新,有一个更好的答案:不要担心最大字节值是多少。根据HBase 文档setStartRowsetStopRow方法的工作方式就像 Python 的切片一样;即,开始是包容的,而停止是排斥的,这意味着你endRowBytes应该是'rk2'

此外,文档提到您可以通过添加字节来使停止行包含在内,因此另一种选择是'rk1' + chr(0)(或'rk1\0''rk1\x00',以您最清楚的为准)。事实上,链接文档中用于解释 HBase 扫描的示例准确地说明了您的用例。

于 2013-01-15T15:57:19.243 回答