KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > nutch > io > TwoDArrayWritable


1 /* Copyright (c) 2004 The Nutch Organization. All rights reserved. */
2 /* Use subject to the conditions in http://www.nutch.org/LICENSE.txt. */
3
4 package net.nutch.io;
5
6 import java.io.*;
7 import java.lang.reflect.Array JavaDoc;
8
9 /** A Writable for 2D arrays containing a matrix of instances of a class. */
10 public class TwoDArrayWritable implements Writable {
11   private Class JavaDoc valueClass;
12   private Writable[][] values;
13
14   public TwoDArrayWritable(Class JavaDoc valueClass) {
15     this.valueClass = valueClass;
16   }
17
18   public TwoDArrayWritable(Class JavaDoc valueClass, Writable[][] values) {
19     this(valueClass);
20     this.values = values;
21   }
22
23   public Object JavaDoc toArray() {
24       int dimensions[] = {values.length, 0};
25       Object JavaDoc result = Array.newInstance(valueClass, dimensions);
26       for (int i = 0; i < values.length; i++) {
27           Object JavaDoc resultRow = Array.newInstance(valueClass, values[i].length);
28           Array.set(result, i, resultRow);
29           for (int j = 0; j < values[i].length; j++) {
30               Array.set(resultRow, j, values[i][j]);
31           }
32       }
33       return result;
34   }
35
36   public void set(Writable[][] values) { this.values = values; }
37
38   public Writable[][] get() { return values; }
39
40   public void readFields(DataInput in) throws IOException {
41     // construct matrix
42
values = new Writable[in.readInt()][];
43     for (int i = 0; i < values.length; i++) {
44         values[i] = new Writable[in.readInt()];
45     }
46
47     // construct values
48
for (int i = 0; i < values.length; i++) {
49         for (int j = 0; j < values[i].length; j++) {
50             Writable value; // construct value
51
try {
52                 value = (Writable)valueClass.newInstance();
53             } catch (InstantiationException JavaDoc e) {
54                 throw new RuntimeException JavaDoc(e.toString());
55             } catch (IllegalAccessException JavaDoc e) {
56                 throw new RuntimeException JavaDoc(e.toString());
57             }
58             value.readFields(in); // read a value
59
values[i][j] = value; // store it in values
60
}
61     }
62   }
63
64   public void write(DataOutput out) throws IOException {
65     out.writeInt(values.length); // write values
66
for (int i = 0; i < values.length; i++) {
67         out.writeInt(values[i].length);
68     }
69     for (int i = 0; i < values.length; i++) {
70         for (int j = 0; j < values[i].length; j++) {
71             values[i][j].write(out);
72         }
73     }
74   }
75 }
76
77
Popular Tags