@ Override public Iterator < SparkeyReader . Entry > iterator ( ) { try { final BlockPositionedInputStream stream ; { final InputStream stream2 = new BufferedInputStream ( new FileInputStream ( logFile ) , 128 * 1024 ) ; Sparkey . incrOpenFiles ( ) ; stream2 . skip ( start ) ; stream = header . getCompressionType ( ) . createBlockInput ( stream2 , header . getCompressionBlockSize ( ) , start ) ; } return new Iterator < SparkeyReader . Entry > ( ) { private long prevPos ; private long pos = start ; private final byte [ ] keyBuf = new byte [ ( int ) header . getMaxKeyLen ( ) ] ; private final Entry entry = new Entry ( stream , keyBuf ) ; private boolean ready = false ; private int entryIndex ; private boolean closed = false ; public boolean hasNext ( ) { if ( ready ) { return true ; } try { entry . stream . skipRemaining ( ) ; pos = stream . getBlockPosition ( ) ; if ( pos >= end ) { closeStream ( ) ; return false ; } if ( pos == prevPos ) { entryIndex ++ ; } else { entryIndex = 0 ; } prevPos = pos ; entry . position = pos ; entry . entryIndex = entryIndex ; entry . type = null ; entry . keyLen = 0 ; entry . valueLen = 0 ; int first ; try { first = Util . readUnsignedVLQInt ( stream ) ; } catch ( EOFException e ) { closeStream ( ) ; return false ; } int second = Util . readUnsignedVLQInt ( stream ) ; long remaining ; if ( first == 0 ) { entry . type = SparkeyReader . Type . DELETE ; entry . keyLen = second ; entry . valueLen = 0 ; remaining = 0 ; } else { entry . type = SparkeyReader . Type . PUT ; entry . keyLen = first - 1 ; entry . valueLen = second ; remaining = entry . valueLen ; } stream . read ( keyBuf , 0 , entry . keyLen ) ; entry . stream . setRemaining ( remaining ) ; ready = true ; return true ; } catch ( IOException e ) { closeStream ( ) ; throw new RuntimeException ( e ) ; } } private void closeStream ( ) { if ( closed ) { return ; } closed = true ; Sparkey . decrOpenFiles ( ) ; Util . nonThrowingClose ( stream ) ; } public Entry next ( ) { if ( ! hasNext ( ) ) { throw new NoSuchElementException ( ) ; } ready = false ; return entry ; } public void remove ( ) { throw new UnsupportedOperationException ( ) ; } } ; } catch ( IOException e ) { throw new RuntimeException ( e ) ; } }
Get an iterator over all the entries in the log file .