1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.caches.ehcache;
17
18 import java.io.ByteArrayInputStream;
19 import java.io.ByteArrayOutputStream;
20 import java.io.IOException;
21 import java.io.ObjectInputStream;
22 import java.io.ObjectOutputStream;
23 import java.nio.ByteBuffer;
24
25 import org.ehcache.spi.serialization.Serializer;
26 import org.ehcache.spi.serialization.SerializerException;
27
28
29
30
31
32
33
34
35
36 public class ObjectSerializer implements Serializer<Object> {
37
38
39
40
41
42
43
44 public ObjectSerializer(ClassLoader loader) {
45
46 }
47
48 @Override
49 public ByteBuffer serialize(Object object) throws SerializerException {
50 try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
51 ObjectOutputStream oos = new ObjectOutputStream(baos)) {
52 oos.writeObject(object);
53 oos.flush();
54 return ByteBuffer.wrap(baos.toByteArray());
55 } catch (IOException e) {
56 throw new SerializerException("Failed to serialize object", e);
57 }
58 }
59
60 @Override
61 public Object read(ByteBuffer binary) throws ClassNotFoundException, SerializerException {
62 byte[] bytes = new byte[binary.remaining()];
63 binary.get(bytes);
64 try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes))) {
65 return ois.readObject();
66 } catch (IOException e) {
67 throw new SerializerException("Failed to deserialize object", e);
68 }
69 }
70
71 @Override
72 public boolean equals(Object object, ByteBuffer binary) throws ClassNotFoundException, SerializerException {
73 return object.equals(read(binary));
74 }
75
76 }