1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.hadoop.hbase.io.encoding;
18
19 import java.nio.ByteBuffer;
20
21 import org.apache.hadoop.hbase.KeyValue;
22 import org.apache.hadoop.hbase.util.ByteBufferUtils;
23
24
25
26
27 class CompressionState {
28 int keyLength;
29 int valueLength;
30
31 short rowLength;
32 int prevOffset = FIRST_KEY;
33 byte familyLength;
34 int qualifierLength;
35 byte type;
36
37 private final static int FIRST_KEY = -1;
38
39 boolean isFirst() {
40 return prevOffset == FIRST_KEY;
41 }
42
43
44
45
46
47
48
49
50 void readKey(ByteBuffer in, int keyLength, int valueLength) {
51 readKey(in, keyLength, valueLength, 0, null);
52 }
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 void readKey(ByteBuffer in, int keyLength, int valueLength,
68 int commonPrefix, CompressionState previousState) {
69 this.keyLength = keyLength;
70 this.valueLength = valueLength;
71
72
73 in.mark();
74
75 if (commonPrefix < KeyValue.ROW_LENGTH_SIZE) {
76 rowLength = in.getShort();
77 ByteBufferUtils.skip(in, rowLength);
78
79 familyLength = in.get();
80
81 qualifierLength = keyLength - rowLength - familyLength -
82 KeyValue.KEY_INFRASTRUCTURE_SIZE;
83 ByteBufferUtils.skip(in, familyLength + qualifierLength);
84 } else {
85 rowLength = previousState.rowLength;
86 familyLength = previousState.familyLength;
87 qualifierLength = previousState.qualifierLength +
88 keyLength - previousState.keyLength;
89 ByteBufferUtils.skip(in, (KeyValue.ROW_LENGTH_SIZE +
90 KeyValue.FAMILY_LENGTH_SIZE) +
91 rowLength + familyLength + qualifierLength);
92 }
93
94 readTimestamp(in);
95
96 type = in.get();
97
98 in.reset();
99 }
100
101 protected void readTimestamp(ByteBuffer in) {
102
103 ByteBufferUtils.skip(in, KeyValue.TIMESTAMP_SIZE);
104 }
105
106 void copyFrom(CompressionState state) {
107 keyLength = state.keyLength;
108 valueLength = state.valueLength;
109
110 rowLength = state.rowLength;
111 prevOffset = state.prevOffset;
112 familyLength = state.familyLength;
113 qualifierLength = state.qualifierLength;
114 type = state.type;
115 }
116 }