1 2 3 4 package net.nutch.io; 5 6 import java.io.*; 7 import java.lang.reflect.Array ; 8 9 10 public class TwoDArrayWritable implements Writable { 11 private Class valueClass; 12 private Writable[][] values; 13 14 public TwoDArrayWritable(Class valueClass) { 15 this.valueClass = valueClass; 16 } 17 18 public TwoDArrayWritable(Class valueClass, Writable[][] values) { 19 this(valueClass); 20 this.values = values; 21 } 22 23 public Object toArray() { 24 int dimensions[] = {values.length, 0}; 25 Object result = Array.newInstance(valueClass, dimensions); 26 for (int i = 0; i < values.length; i++) { 27 Object 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 values = new Writable[in.readInt()][]; 43 for (int i = 0; i < values.length; i++) { 44 values[i] = new Writable[in.readInt()]; 45 } 46 47 for (int i = 0; i < values.length; i++) { 49 for (int j = 0; j < values[i].length; j++) { 50 Writable value; try { 52 value = (Writable)valueClass.newInstance(); 53 } catch (InstantiationException e) { 54 throw new RuntimeException (e.toString()); 55 } catch (IllegalAccessException e) { 56 throw new RuntimeException (e.toString()); 57 } 58 value.readFields(in); values[i][j] = value; } 61 } 62 } 63 64 public void write(DataOutput out) throws IOException { 65 out.writeInt(values.length); 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 |