/* (c) 2014 LinkedIn Corp. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the * License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. */ package com.linkedin.cubert.block; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.serializer.Deserializer; import org.apache.hadoop.io.serializer.SerializationFactory; import com.linkedin.cubert.io.BlockSerializationType; import com.linkedin.cubert.io.CompactDeserializer; public class BlockIterator<V> implements Iterator<V> { private final Deserializer<V> deserializer; private V value = null; public BlockIterator(Configuration conf, InputStream inStream, Class<V> valueClass, BlockSerializationType serializationType, BlockSchema schema) throws IOException, InstantiationException, IllegalAccessException { switch (serializationType) { case DEFAULT: SerializationFactory serializationFactory = new SerializationFactory(conf); deserializer = serializationFactory.getDeserializer(valueClass); break; case COMPACT: deserializer = new CompactDeserializer<V>(schema); break; default: deserializer = null; } deserializer.open(inStream); } @Override public void remove() { throw new UnsupportedOperationException(); } @Override public boolean hasNext() { return false; } @Override public V next() { try { value = deserializer.deserialize(value); } catch (EOFException e) { value = null; } catch (IOException e) { throw new RuntimeException(e); } return value; } }