1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.types;
19
20 import com.google.protobuf.CodedInputStream;
21 import com.google.protobuf.CodedOutputStream;
22 import org.apache.hadoop.hbase.protobuf.generated.CellProtos;
23 import org.apache.hadoop.hbase.util.PositionedByteRange;
24
25 import java.io.IOException;
26
27
28
29
30 public class PBCell extends PBType<CellProtos.Cell> {
31 @Override
32 public Class<CellProtos.Cell> encodedClass() {
33 return CellProtos.Cell.class;
34 }
35
36 @Override
37 public int skip(PositionedByteRange src) {
38 CellProtos.Cell.Builder builder = CellProtos.Cell.newBuilder();
39 CodedInputStream is = inputStreamFromByteRange(src);
40 try {
41 builder.mergeFrom(is);
42 int consumed = is.getTotalBytesRead();
43 src.setPosition(src.getPosition() + consumed);
44 return consumed;
45 } catch (IOException e) {
46 throw new RuntimeException("Error while skipping type.", e);
47 }
48 }
49
50 @Override
51 public CellProtos.Cell decode(PositionedByteRange src) {
52 CellProtos.Cell.Builder builder = CellProtos.Cell.newBuilder();
53 CodedInputStream is = inputStreamFromByteRange(src);
54 try {
55 CellProtos.Cell ret = builder.mergeFrom(is).build();
56 src.setPosition(src.getPosition() + is.getTotalBytesRead());
57 return ret;
58 } catch (IOException e) {
59 throw new RuntimeException("Error while decoding type.", e);
60 }
61 }
62
63 @Override
64 public int encode(PositionedByteRange dst, CellProtos.Cell val) {
65 CodedOutputStream os = outputStreamFromByteRange(dst);
66 try {
67 int before = os.spaceLeft(), after, written;
68 val.writeTo(os);
69 after = os.spaceLeft();
70 written = before - after;
71 dst.setPosition(dst.getPosition() + written);
72 return written;
73 } catch (IOException e) {
74 throw new RuntimeException("Error while encoding type.", e);
75 }
76 }
77 }