ArrayFile.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 org.apache.hadoop.fs.*;
  21. import org.apache.hadoop.conf.*;
  22. import org.apache.hadoop.util.*;
  23. import org.apache.hadoop.io.SequenceFile.CompressionType;
  24. /** A dense file-based mapping from integers to values. */
  25. public class ArrayFile extends MapFile {
  26.   protected ArrayFile() {}                            // no public ctor
  27.   /** Write a new array file. */
  28.   public static class Writer extends MapFile.Writer {
  29.     private LongWritable count = new LongWritable(0);
  30.     /** Create the named file for values of the named class. */
  31.     public Writer(Configuration conf, FileSystem fs,
  32.                   String file, Class<? extends Writable> valClass)
  33.       throws IOException {
  34.       super(conf, fs, file, LongWritable.class, valClass);
  35.     }
  36.     /** Create the named file for values of the named class. */
  37.     public Writer(Configuration conf, FileSystem fs,
  38.                   String file, Class<? extends Writable> valClass,
  39.                   CompressionType compress, Progressable progress)
  40.       throws IOException {
  41.       super(conf, fs, file, LongWritable.class, valClass, compress, progress);
  42.     }
  43.     /** Append a value to the file. */
  44.     public synchronized void append(Writable value) throws IOException {
  45.       super.append(count, value);                 // add to map
  46.       count.set(count.get()+1);                   // increment count
  47.     }
  48.   }
  49.   /** Provide access to an existing array file. */
  50.   public static class Reader extends MapFile.Reader {
  51.     private LongWritable key = new LongWritable();
  52.     /** Construct an array reader for the named file.*/
  53.     public Reader(FileSystem fs, String file, Configuration conf) throws IOException {
  54.       super(fs, file, conf);
  55.     }
  56.     /** Positions the reader before its <code>n</code>th value. */
  57.     public synchronized void seek(long n) throws IOException {
  58.       key.set(n);
  59.       seek(key);
  60.     }
  61.     /** Read and return the next value in the file. */
  62.     public synchronized Writable next(Writable value) throws IOException {
  63.       return next(key, value) ? value : null;
  64.     }
  65.     /** Returns the key associated with the most recent call to {@link
  66.      * #seek(long)}, {@link #next(Writable)}, or {@link
  67.      * #get(long,Writable)}. */
  68.     public synchronized long key() throws IOException {
  69.       return key.get();
  70.     }
  71.     /** Return the <code>n</code>th value in the file. */
  72.     public synchronized Writable get(long n, Writable value)
  73.       throws IOException {
  74.       key.set(n);
  75.       return get(key, value);
  76.     }
  77.   }
  78. }