public BlockRead getCachedMetaBlock(String blockName) throws IOException {
      String _lookup = fileName + "M" + blockName;

      if (_iCache != null) {
        CacheEntry cacheEntry = _iCache.getBlock(_lookup);

        if (cacheEntry != null) {
          return new CachedBlockRead(cacheEntry, cacheEntry.getBuffer());
        }
      }

      return null;
    }
    private BlockRead getBlock(String _lookup, BlockCache cache, BlockLoader loader)
        throws IOException {

      BlockReader _currBlock;

      if (cache != null) {
        CacheEntry cb = null;
        cb = cache.getBlock(_lookup);

        if (cb != null) {
          return new CachedBlockRead(cb, cb.getBuffer());
        }
      }
      /** grab the currBlock at this point the block is still in the data stream */
      _currBlock = loader.get();

      /** If the block is bigger than the cache just return the stream */
      return cacheBlock(_lookup, cache, _currBlock, loader.getInfo());
    }