python - max字节相当于java Byte.MAX_VALUE

时间:2013-01-15 14:15:38

标签: java python hbase

python是否与表示最大字节的java Byte.MAX_VALUE等价?我查看了python sys模块,我只找到了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等价。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:1)

鉴于您的更新,有一个更好的答案:不要担心最大字节值是什么。根据{{​​3}},setStartRowsetStopRow方法就像Python的切片一样工作;也就是说,开头是包容性的,但止损是独占,这意味着您的endRowBytes应该只是'rk2'

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