1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.codec.delimited;
21
22 import java.nio.ByteBuffer;
23
24 import org.apache.mina.codec.StatelessProtocolEncoder;
25
26
27
28
29
30 public class SizePrefixedEncoder<IN> implements StatelessProtocolEncoder<IN, ByteBuffer> {
31
32 private final ByteBufferEncoder<Integer> sizeEncoder;
33
34 private final ByteBufferEncoder<IN> payloadEncoder;
35
36 public SizePrefixedEncoder(ByteBufferEncoder<Integer> sizeEncoder, ByteBufferEncoder<IN> payloadEncoder) {
37 super();
38 this.sizeEncoder = sizeEncoder;
39 this.payloadEncoder = payloadEncoder;
40 }
41
42 @Override
43 public Void createEncoderState() {
44
45 return null;
46 }
47
48 @Override
49 public ByteBuffer encode(IN message, Void context) {
50 int messageSize = payloadEncoder.getEncodedSize(message);
51 ByteBuffer buffer = ByteBuffer.allocate(sizeEncoder.getEncodedSize(messageSize) + messageSize);
52
53 sizeEncoder.writeTo(messageSize, buffer);
54 payloadEncoder.writeTo(message, buffer);
55
56 buffer.flip();
57 return buffer;
58 }
59
60 }