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.meta; 020 021import java.io.IOException; 022import java.util.Iterator; 023 024import org.apache.hadoop.classification.InterfaceAudience; 025import org.apache.hadoop.classification.InterfaceStability; 026import org.apache.hadoop.record.RecordInput; 027 028/** 029 * Various utility functions for Hadooop record I/O platform. 030 * 031 * @deprecated Replaced by <a href="http://hadoop.apache.org/avro/">Avro</a>. 032 */ 033@Deprecated 034@InterfaceAudience.Public 035@InterfaceStability.Stable 036public class Utils { 037 038 /** Cannot create a new instance of Utils */ 039 private Utils() { 040 } 041 042 /** 043 * read/skip bytes from stream based on a type 044 */ 045 public static void skip(RecordInput rin, String tag, TypeID typeID) throws IOException { 046 switch (typeID.typeVal) { 047 case TypeID.RIOType.BOOL: 048 rin.readBool(tag); 049 break; 050 case TypeID.RIOType.BUFFER: 051 rin.readBuffer(tag); 052 break; 053 case TypeID.RIOType.BYTE: 054 rin.readByte(tag); 055 break; 056 case TypeID.RIOType.DOUBLE: 057 rin.readDouble(tag); 058 break; 059 case TypeID.RIOType.FLOAT: 060 rin.readFloat(tag); 061 break; 062 case TypeID.RIOType.INT: 063 rin.readInt(tag); 064 break; 065 case TypeID.RIOType.LONG: 066 rin.readLong(tag); 067 break; 068 case TypeID.RIOType.MAP: 069 org.apache.hadoop.record.Index midx1 = rin.startMap(tag); 070 MapTypeID mtID = (MapTypeID) typeID; 071 for (; !midx1.done(); midx1.incr()) { 072 skip(rin, tag, mtID.getKeyTypeID()); 073 skip(rin, tag, mtID.getValueTypeID()); 074 } 075 rin.endMap(tag); 076 break; 077 case TypeID.RIOType.STRING: 078 rin.readString(tag); 079 break; 080 case TypeID.RIOType.STRUCT: 081 rin.startRecord(tag); 082 // read past each field in the struct 083 StructTypeID stID = (StructTypeID) typeID; 084 Iterator<FieldTypeInfo> it = stID.getFieldTypeInfos().iterator(); 085 while (it.hasNext()) { 086 FieldTypeInfo tInfo = it.next(); 087 skip(rin, tag, tInfo.getTypeID()); 088 } 089 rin.endRecord(tag); 090 break; 091 case TypeID.RIOType.VECTOR: 092 org.apache.hadoop.record.Index vidx1 = rin.startVector(tag); 093 VectorTypeID vtID = (VectorTypeID) typeID; 094 for (; !vidx1.done(); vidx1.incr()) { 095 skip(rin, tag, vtID.getElementTypeID()); 096 } 097 rin.endVector(tag); 098 break; 099 default: 100 // shouldn't be here 101 throw new IOException("Unknown typeID when skipping bytes"); 102 } 103 } 104}