CellUtil是个管理Cell的工具类.主要是一些静态方法.
- cloneRow可用于获取rowkey.
- 返回值为byte数组,所以打印时需要转为String.
public static byte[] cloneRow(Cell cell){
byte[] output = new byte[cell.getRowLength()];
copyRowTo(cell, output, 0);
return output;
}
调用了 copyRowTo方法,cell.getRowArray()就是获取的某个rowkey那整行的最原始的byte信息了.
public static int copyRowTo(Cell cell, byte[] destination, int destinationOffset) {
System.arraycopy(cell.getRowArray(), cell.getRowOffset(), destination, destinationOffset,
cell.getRowLength());
return destinationOffset + cell.getRowLength();
}
比如
System.out.println(new String(cell.getRowArray()));
结果如下.需要从中提取rowkey的信息.
那么getrowarray又是如何定义的呢?继续追根溯源
/**
* @return the backing array of the entire KeyValue (all KeyValue fields are in a single array)
*/
@Override
public byte[] getRowArray() {
return bytes;
}
bytes是一个KeyValue类的属性
// KeyValue core instance fields.
protected byte [] bytes = null; // an immutable byte array that contains the KV
protected int offset = 0; // offset into bytes buffer KV starts at
protected int length = 0; // length of the KV starting from offset.