code: private InputStream nextEntryStream() throws IOException {
      long nextLedgerEntryId = currentStreamState.getNextLedgerEntryId();
      if (nextLedgerEntryId > maxLedgerEntryIdSeen) {
        updateMaxLedgerEntryIdSeen();
        if (nextLedgerEntryId > maxLedgerEntryIdSeen) {
          // Return null if we've reached the end of the ledger: we can not
          // read beyond the end of the ledger and it is up to the caller to
          // either find the new "tail" of the ledger (if the ledger is in-
          // progress) or open the next ledger (if the ledger is finalized)
          if (LOG.isDebugEnabled()) {
            LOG.debug("Requesting to ledger entryId " + nextLedgerEntryId +
                ", but "+ " maxLedgerEntryIdSeen is " + maxLedgerEntryIdSeen +
                ", ledger length is " + ledger.getLength());
          }
          return null;
        }
      }
      try {
        Enumeration<LedgerEntry> entries =
            ledger.readEntries(nextLedgerEntryId, nextLedgerEntryId);
        currentStreamState.incrementNextLedgerEntryId();
        if (entries.hasMoreElements()) {
          LedgerEntry entry = entries.nextElement();
          if (entries.hasMoreElements()) {
            throw new IllegalStateException("More than one entry retrieved!");
          }
          currentStreamState.setOffsetInEntry(0);
          return entry.getEntryInputStream();
        }
      } catch (BKException e) {
        throw new IOException("Unrecoverable BookKeeper error reading entry " +
            nextLedgerEntryId, e);
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        throw new IOException("Interrupted reading BookKeeper entry " +
            nextLedgerEntryId, e);
      }
      return null;
    }
docs: a new stream for a new ledger entry