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

网格计算

开发平台:

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.record;
  19. import java.io.DataInput;
  20. import java.io.IOException;
  21. import java.io.DataInputStream;
  22. import java.io.InputStream;
  23. /**
  24.  */
  25. public class BinaryRecordInput implements RecordInput {
  26.     
  27.   private DataInput in;
  28.     
  29.   static private class BinaryIndex implements Index {
  30.     private int nelems;
  31.     private BinaryIndex(int nelems) {
  32.       this.nelems = nelems;
  33.     }
  34.     public boolean done() {
  35.       return (nelems <= 0);
  36.     }
  37.     public void incr() {
  38.       nelems--;
  39.     }
  40.   }
  41.     
  42.   private BinaryRecordInput() {}
  43.     
  44.   private void setDataInput(DataInput inp) {
  45.     this.in = inp;
  46.   }
  47.     
  48.   private static ThreadLocal bIn = new ThreadLocal() {
  49.       protected synchronized Object initialValue() {
  50.         return new BinaryRecordInput();
  51.       }
  52.     };
  53.     
  54.   /**
  55.    * Get a thread-local record input for the supplied DataInput.
  56.    * @param inp data input stream
  57.    * @return binary record input corresponding to the supplied DataInput.
  58.    */
  59.   public static BinaryRecordInput get(DataInput inp) {
  60.     BinaryRecordInput bin = (BinaryRecordInput) bIn.get();
  61.     bin.setDataInput(inp);
  62.     return bin;
  63.   }
  64.     
  65.   /** Creates a new instance of BinaryRecordInput */
  66.   public BinaryRecordInput(InputStream strm) {
  67.     this.in = new DataInputStream(strm);
  68.   }
  69.     
  70.   /** Creates a new instance of BinaryRecordInput */
  71.   public BinaryRecordInput(DataInput din) {
  72.     this.in = din;
  73.   }
  74.     
  75.   public byte readByte(final String tag) throws IOException {
  76.     return in.readByte();
  77.   }
  78.     
  79.   public boolean readBool(final String tag) throws IOException {
  80.     return in.readBoolean();
  81.   }
  82.     
  83.   public int readInt(final String tag) throws IOException {
  84.     return Utils.readVInt(in);
  85.   }
  86.     
  87.   public long readLong(final String tag) throws IOException {
  88.     return Utils.readVLong(in);
  89.   }
  90.     
  91.   public float readFloat(final String tag) throws IOException {
  92.     return in.readFloat();
  93.   }
  94.     
  95.   public double readDouble(final String tag) throws IOException {
  96.     return in.readDouble();
  97.   }
  98.     
  99.   public String readString(final String tag) throws IOException {
  100.     return Utils.fromBinaryString(in);
  101.   }
  102.     
  103.   public Buffer readBuffer(final String tag) throws IOException {
  104.     final int len = Utils.readVInt(in);
  105.     final byte[] barr = new byte[len];
  106.     in.readFully(barr);
  107.     return new Buffer(barr);
  108.   }
  109.     
  110.   public void startRecord(final String tag) throws IOException {
  111.     // no-op
  112.   }
  113.     
  114.   public void endRecord(final String tag) throws IOException {
  115.     // no-op
  116.   }
  117.     
  118.   public Index startVector(final String tag) throws IOException {
  119.     return new BinaryIndex(readInt(tag));
  120.   }
  121.     
  122.   public void endVector(final String tag) throws IOException {
  123.     // no-op
  124.   }
  125.     
  126.   public Index startMap(final String tag) throws IOException {
  127.     return new BinaryIndex(readInt(tag));
  128.   }
  129.     
  130.   public void endMap(final String tag) throws IOException {
  131.     // no-op
  132.   }
  133. }