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.classification.InterfaceAudience;
26 import org.apache.hadoop.hbase.Cell;
27 import org.apache.hadoop.hbase.CellUtil;
28 import org.apache.hadoop.hbase.protobuf.generated.CellProtos;
29
30
31
32
33
34 @InterfaceAudience.Private
35 public class MessageCodec implements Codec {
36 static class MessageEncoder extends BaseEncoder {
37 MessageEncoder(final OutputStream out) {
38 super(out);
39 }
40
41 @Override
42 public void write(Cell cell) throws IOException {
43 checkFlushed();
44 CellProtos.Cell.Builder builder = CellProtos.Cell.newBuilder();
45
46
47 builder.setRow(ByteStringer.wrap(cell.getRowArray(), cell.getRowOffset(),
48 cell.getRowLength()));
49 builder.setFamily(ByteStringer.wrap(cell.getFamilyArray(), cell.getFamilyOffset(),
50 cell.getFamilyLength()));
51 builder.setQualifier(ByteStringer.wrap(cell.getQualifierArray(),
52 cell.getQualifierOffset(), cell.getQualifierLength()));
53 builder.setTimestamp(cell.getTimestamp());
54 builder.setCellType(CellProtos.CellType.valueOf(cell.getTypeByte()));
55 builder.setValue(ByteStringer.wrap(cell.getValueArray(), cell.getValueOffset(),
56 cell.getValueLength()));
57 CellProtos.Cell pbcell = builder.build();
58 pbcell.writeDelimitedTo(this.out);
59 }
60 }
61
62 static class MessageDecoder extends BaseDecoder {
63 MessageDecoder(final InputStream in) {
64 super(in);
65 }
66
67 protected Cell parseCell() throws IOException {
68 CellProtos.Cell pbcell = CellProtos.Cell.parseDelimitedFrom(this.in);
69 return CellUtil.createCell(pbcell.getRow().toByteArray(),
70 pbcell.getFamily().toByteArray(), pbcell.getQualifier().toByteArray(),
71 pbcell.getTimestamp(), (byte)pbcell.getCellType().getNumber(),
72 pbcell.getValue().toByteArray());
73 }
74 }
75
76 @Override
77 public Decoder getDecoder(InputStream is) {
78 return new MessageDecoder(is);
79 }
80
81 @Override
82 public Encoder getEncoder(OutputStream os) {
83 return new MessageEncoder(os);
84 }
85 }