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 is.setSizeLimit(src.getLength());
41 try {
42 builder.mergeFrom(is);
43 int consumed = is.getTotalBytesRead();
44 src.setPosition(src.getPosition() + consumed);
45 return consumed;
46 } catch (IOException e) {
47 throw new RuntimeException("Error while skipping type.", e);
48 }
49 }
50
51 @Override
52 public CellProtos.Cell decode(PositionedByteRange src) {
53 CellProtos.Cell.Builder builder = CellProtos.Cell.newBuilder();
54 CodedInputStream is = inputStreamFromByteRange(src);
55 is.setSizeLimit(src.getLength());
56 try {
57 CellProtos.Cell ret = builder.mergeFrom(is).build();
58 src.setPosition(src.getPosition() + is.getTotalBytesRead());
59 return ret;
60 } catch (IOException e) {
61 throw new RuntimeException("Error while decoding type.", e);
62 }
63 }
64
65 @Override
66 public int encode(PositionedByteRange dst, CellProtos.Cell val) {
67 CodedOutputStream os = outputStreamFromByteRange(dst);
68 try {
69 int before = os.spaceLeft(), after, written;
70 val.writeTo(os);
71 after = os.spaceLeft();
72 written = before - after;
73 dst.setPosition(dst.getPosition() + written);
74 return written;
75 } catch (IOException e) {
76 throw new RuntimeException("Error while encoding type.", e);
77 }
78 }
79 }