ArrayWritable.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. /** 
  22.  * A Writable for arrays containing instances of a class. The elements of this
  23.  * writable must all be instances of the same class. If this writable will be
  24.  * the input for a Reducer, you will need to create a subclass that sets the
  25.  * value to be of the proper type.
  26.  *
  27.  * For example:
  28.  * <code>
  29.  * public class IntArrayWritable extends ArrayWritable {
  30.  *   public IntArrayWritable() { 
  31.  *     super(IntWritable.class); 
  32.  *   }
  33.  * }
  34.  * </code>
  35.  */
  36. public class ArrayWritable implements Writable {
  37.   private Class<? extends Writable> valueClass;
  38.   private Writable[] values;
  39.   public ArrayWritable(Class<? extends Writable> valueClass) {
  40.     if (valueClass == null) { 
  41.       throw new IllegalArgumentException("null valueClass"); 
  42.     }    
  43.     this.valueClass = valueClass;
  44.   }
  45.   public ArrayWritable(Class<? extends Writable> valueClass, Writable[] values) {
  46.     this(valueClass);
  47.     this.values = values;
  48.   }
  49.   public ArrayWritable(String[] strings) {
  50.     this(UTF8.class, new Writable[strings.length]);
  51.     for (int i = 0; i < strings.length; i++) {
  52.       values[i] = new UTF8(strings[i]);
  53.     }
  54.   }
  55.   public Class getValueClass() {
  56.     return valueClass;
  57.   }
  58.   public String[] toStrings() {
  59.     String[] strings = new String[values.length];
  60.     for (int i = 0; i < values.length; i++) {
  61.       strings[i] = values[i].toString();
  62.     }
  63.     return strings;
  64.   }
  65.   public Object toArray() {
  66.     Object result = Array.newInstance(valueClass, values.length);
  67.     for (int i = 0; i < values.length; i++) {
  68.       Array.set(result, i, values[i]);
  69.     }
  70.     return result;
  71.   }
  72.   public void set(Writable[] values) { this.values = values; }
  73.   public Writable[] get() { return values; }
  74.   public void readFields(DataInput in) throws IOException {
  75.     values = new Writable[in.readInt()];          // construct values
  76.     for (int i = 0; i < values.length; i++) {
  77.       Writable value = WritableFactories.newInstance(valueClass);
  78.       value.readFields(in);                       // read a value
  79.       values[i] = value;                          // store it in values
  80.     }
  81.   }
  82.   public void write(DataOutput out) throws IOException {
  83.     out.writeInt(values.length);                 // write values
  84.     for (int i = 0; i < values.length; i++) {
  85.       values[i].write(out);
  86.     }
  87.   }
  88. }