TwoDArrayWritable.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.io;
  19. import java.io.*;
  20. import java.lang.reflect.Array;
  21. /** A Writable for 2D arrays containing a matrix of instances of a class. */
  22. public class TwoDArrayWritable implements Writable {
  23.   private Class valueClass;
  24.   private Writable[][] values;
  25.   public TwoDArrayWritable(Class valueClass) {
  26.     this.valueClass = valueClass;
  27.   }
  28.   public TwoDArrayWritable(Class valueClass, Writable[][] values) {
  29.     this(valueClass);
  30.     this.values = values;
  31.   }
  32.   public Object toArray() {
  33.     int dimensions[] = {values.length, 0};
  34.     Object result = Array.newInstance(valueClass, dimensions);
  35.     for (int i = 0; i < values.length; i++) {
  36.       Object resultRow = Array.newInstance(valueClass, values[i].length);
  37.       Array.set(result, i, resultRow);
  38.       for (int j = 0; j < values[i].length; j++) {
  39.         Array.set(resultRow, j, values[i][j]);
  40.       }
  41.     }
  42.     return result;
  43.   }
  44.   public void set(Writable[][] values) { this.values = values; }
  45.   public Writable[][] get() { return values; }
  46.   public void readFields(DataInput in) throws IOException {
  47.     // construct matrix
  48.     values = new Writable[in.readInt()][];          
  49.     for (int i = 0; i < values.length; i++) {
  50.       values[i] = new Writable[in.readInt()];
  51.     }
  52.     // construct values
  53.     for (int i = 0; i < values.length; i++) {
  54.       for (int j = 0; j < values[i].length; j++) {
  55.         Writable value;                             // construct value
  56.         try {
  57.           value = (Writable)valueClass.newInstance();
  58.         } catch (InstantiationException e) {
  59.           throw new RuntimeException(e.toString());
  60.         } catch (IllegalAccessException e) {
  61.           throw new RuntimeException(e.toString());
  62.         }
  63.         value.readFields(in);                       // read a value
  64.         values[i][j] = value;                       // store it in values
  65.       }
  66.     }
  67.   }
  68.   public void write(DataOutput out) throws IOException {
  69.     out.writeInt(values.length);                 // write values
  70.     for (int i = 0; i < values.length; i++) {
  71.       out.writeInt(values[i].length);
  72.     }
  73.     for (int i = 0; i < values.length; i++) {
  74.       for (int j = 0; j < values[i].length; j++) {
  75.         values[i][j].write(out);
  76.       }
  77.     }
  78.   }
  79. }