1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.codec;
19
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.io.OutputStream;
23
24 import org.apache.hadoop.hbase.util.ByteStringer;
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.hbase.Cell;
27 import org.apache.hadoop.hbase.CellUtil;
28 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
29 import org.apache.hadoop.hbase.protobuf.generated.CellProtos;
30
31
32
33
34
35 @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)
36 public class MessageCodec implements Codec {
37 static class MessageEncoder extends BaseEncoder {
38 MessageEncoder(final OutputStream out) {
39 super(out);
40 }
41
42 @Override
43 public void write(Cell cell) throws IOException {
44 checkFlushed();
45 CellProtos.Cell.Builder builder = CellProtos.Cell.newBuilder();
46
47
48 builder.setRow(ByteStringer.wrap(cell.getRowArray(), cell.getRowOffset(),
49 cell.getRowLength()));
50 builder.setFamily(ByteStringer.wrap(cell.getFamilyArray(), cell.getFamilyOffset(),
51 cell.getFamilyLength()));
52 builder.setQualifier(ByteStringer.wrap(cell.getQualifierArray(),
53 cell.getQualifierOffset(), cell.getQualifierLength()));
54 builder.setTimestamp(cell.getTimestamp());
55 builder.setCellType(CellProtos.CellType.valueOf(cell.getTypeByte()));
56 builder.setValue(ByteStringer.wrap(cell.getValueArray(), cell.getValueOffset(),
57 cell.getValueLength()));
58 CellProtos.Cell pbcell = builder.build();
59 pbcell.writeDelimitedTo(this.out);
60 }
61 }
62
63 static class MessageDecoder extends BaseDecoder {
64 MessageDecoder(final InputStream in) {
65 super(in);
66 }
67
68 protected Cell parseCell() throws IOException {
69 CellProtos.Cell pbcell = CellProtos.Cell.parseDelimitedFrom(this.in);
70 return CellUtil.createCell(pbcell.getRow().toByteArray(),
71 pbcell.getFamily().toByteArray(), pbcell.getQualifier().toByteArray(),
72 pbcell.getTimestamp(), (byte)pbcell.getCellType().getNumber(),
73 pbcell.getValue().toByteArray());
74 }
75 }
76
77 @Override
78 public Decoder getDecoder(InputStream is) {
79 return new MessageDecoder(is);
80 }
81
82 @Override
83 public Encoder getEncoder(OutputStream os) {
84 return new MessageEncoder(os);
85 }
86 }