1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.giraph.writable.kryo.serializers;
19
20 import java.io.DataInputStream;
21 import java.io.DataOutputStream;
22 import java.io.IOException;
23
24 import org.apache.giraph.utils.ReflectionUtils;
25 import org.apache.giraph.utils.WritableUtils;
26 import org.apache.hadoop.io.Writable;
27
28 import com.esotericsoftware.kryo.Kryo;
29 import com.esotericsoftware.kryo.Serializer;
30 import com.esotericsoftware.kryo.io.Input;
31 import com.esotericsoftware.kryo.io.Output;
32
33
34
35
36
37
38
39
40
41 public class DirectWritableSerializer<T extends Writable>
42 extends Serializer<T> {
43
44 @Override
45 public void write(Kryo kryo, Output output, T object) {
46 try {
47 object.write(new DataOutputStream(output));
48 } catch (IOException e) {
49 throw new RuntimeException(
50 "DirectWritableSerializer.write calling Writable method of class: " +
51 object.getClass().getName() + " encountered issues", e);
52 }
53 }
54
55 @Override
56 public T read(Kryo kryo, Input input, Class<T> type) {
57 try {
58 T object = create(kryo, input, type);
59 kryo.reference(object);
60 object.readFields(new DataInputStream(input));
61
62 return object;
63 } catch (IOException e) {
64 throw new RuntimeException(
65 "DirectWritableSerializer.read calling Writable method of class: " +
66 type.getName() + " encountered issues", e);
67 }
68 }
69
70 @Override
71 public T copy(Kryo kryo, T original) {
72 return WritableUtils.createCopy(original);
73 }
74
75
76
77
78
79
80
81
82
83
84
85
86 protected T create(Kryo kryo, Input input, Class<T> type) {
87 return ReflectionUtils.newInstance(type);
88 }
89 }