001/**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019package org.apache.hadoop.record;
020
021import java.io.DataInput;
022import java.io.IOException;
023import java.io.DataInputStream;
024import java.io.InputStream;
025
026import org.apache.hadoop.classification.InterfaceAudience;
027import org.apache.hadoop.classification.InterfaceStability;
028
029/**
030 * @deprecated Replaced by <a href="https://hadoop.apache.org/avro/">Avro</a>.
031 */
032@Deprecated
033@InterfaceAudience.Public
034@InterfaceStability.Stable
035public class BinaryRecordInput implements RecordInput {
036    
037  private DataInput in;
038    
039  static private class BinaryIndex implements Index {
040    private int nelems;
041    private BinaryIndex(int nelems) {
042      this.nelems = nelems;
043    }
044    public boolean done() {
045      return (nelems <= 0);
046    }
047    public void incr() {
048      nelems--;
049    }
050  }
051    
052  private BinaryRecordInput() {}
053    
054  private void setDataInput(DataInput inp) {
055    this.in = inp;
056  }
057    
058  private static ThreadLocal bIn = new ThreadLocal() {
059      protected synchronized Object initialValue() {
060        return new BinaryRecordInput();
061      }
062    };
063    
064  /**
065   * Get a thread-local record input for the supplied DataInput.
066   * @param inp data input stream
067   * @return binary record input corresponding to the supplied DataInput.
068   */
069  public static BinaryRecordInput get(DataInput inp) {
070    BinaryRecordInput bin = (BinaryRecordInput) bIn.get();
071    bin.setDataInput(inp);
072    return bin;
073  }
074    
075  /** Creates a new instance of BinaryRecordInput */
076  public BinaryRecordInput(InputStream strm) {
077    this.in = new DataInputStream(strm);
078  }
079    
080  /** Creates a new instance of BinaryRecordInput */
081  public BinaryRecordInput(DataInput din) {
082    this.in = din;
083  }
084    
085  public byte readByte(final String tag) throws IOException {
086    return in.readByte();
087  }
088    
089  public boolean readBool(final String tag) throws IOException {
090    return in.readBoolean();
091  }
092    
093  public int readInt(final String tag) throws IOException {
094    return Utils.readVInt(in);
095  }
096    
097  public long readLong(final String tag) throws IOException {
098    return Utils.readVLong(in);
099  }
100    
101  public float readFloat(final String tag) throws IOException {
102    return in.readFloat();
103  }
104    
105  public double readDouble(final String tag) throws IOException {
106    return in.readDouble();
107  }
108    
109  public String readString(final String tag) throws IOException {
110    return Utils.fromBinaryString(in);
111  }
112    
113  public Buffer readBuffer(final String tag) throws IOException {
114    final int len = Utils.readVInt(in);
115    final byte[] barr = new byte[len];
116    in.readFully(barr);
117    return new Buffer(barr);
118  }
119    
120  public void startRecord(final String tag) throws IOException {
121    // no-op
122  }
123    
124  public void endRecord(final String tag) throws IOException {
125    // no-op
126  }
127    
128  public Index startVector(final String tag) throws IOException {
129    return new BinaryIndex(readInt(tag));
130  }
131    
132  public void endVector(final String tag) throws IOException {
133    // no-op
134  }
135    
136  public Index startMap(final String tag) throws IOException {
137    return new BinaryIndex(readInt(tag));
138  }
139    
140  public void endMap(final String tag) throws IOException {
141    // no-op
142  }
143}