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.serialization;
21
22 import java.io.IOException;
23 import java.io.ObjectOutputStream;
24 import java.io.Serializable;
25 import java.nio.ByteBuffer;
26
27 import org.apache.mina.codec.delimited.ByteBufferEncoder;
28 import org.apache.mina.util.ByteBufferOutputStream;
29
30
31
32
33
34
35 public class JavaNativeMessageEncoder<OUT extends Serializable> extends ByteBufferEncoder<OUT> {
36 @Override
37 public ByteBuffer encode(OUT message) {
38
39 return serialize(message);
40 }
41
42 private OUT lastObject;
43
44 private ByteBuffer lastSerialized;
45
46 @Override
47 public int getEncodedSize(OUT message) {
48 return serialize(message).remaining();
49 }
50
51 private ByteBuffer serialize(OUT message) {
52 if (message != lastObject) {
53 ByteBufferOutputStream ebbosa = new ByteBufferOutputStream();
54 ebbosa.setElastic(true);
55 try {
56 ObjectOutputStream oos = new ObjectOutputStream(ebbosa);
57 oos.writeObject(message);
58 oos.close();
59 lastObject = message;
60 lastSerialized = ebbosa.getByteBuffer();
61 } catch (IOException e) {
62 throw new IllegalStateException("Serialization exception", e);
63 }
64 }
65 return lastSerialized;
66 }
67
68 @Override
69 public void writeTo(OUT message, ByteBuffer buffer) {
70 buffer.put(serialize(message));
71 }
72 }