1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.giraph.utils;
19
20 import java.io.DataInput;
21 import java.io.DataOutput;
22 import java.io.IOException;
23 import java.lang.reflect.Array;
24
25 import org.apache.hadoop.io.Writable;
26 import org.apache.hadoop.io.WritableFactories;
27
28 import com.google.common.base.Preconditions;
29
30
31
32
33
34
35
36 public class ArrayWritable<T extends Writable> implements Writable {
37
38 private Class<T> valueClass;
39
40 private T[] values;
41
42
43 public ArrayWritable() {
44 }
45
46
47
48
49
50
51 public ArrayWritable(Class<T> valueClass, T[] values) {
52 Preconditions.checkNotNull(valueClass,
53 "valueClass cannot be null in ArrayWritable");
54 this.valueClass = valueClass;
55 this.values = values;
56 }
57
58
59
60
61
62 public Class<T> getValueClass() {
63 return valueClass;
64 }
65
66
67
68
69
70 public void set(T[] values) { this.values = values; }
71
72
73
74
75
76 public T[] get() { return values; }
77
78 @Override
79 public void readFields(DataInput in) throws IOException {
80 valueClass = WritableUtils.readClass(in);
81 values = (T[]) Array.newInstance(valueClass, in.readInt());
82
83 for (int i = 0; i < values.length; i++) {
84 T value = (T) WritableFactories.newInstance(valueClass);
85 value.readFields(in);
86 values[i] = value;
87 }
88 }
89
90 @Override
91 public void write(DataOutput out) throws IOException {
92 Preconditions.checkNotNull(valueClass,
93 "valueClass cannot be null in ArrayWritable");
94 WritableUtils.writeClass(valueClass, out);
95 out.writeInt(values.length);
96 for (int i = 0; i < values.length; i++) {
97 values[i].write(out);
98 }
99 }
100 }