code: @Override
      public Iterator<Event> getEvents() {
          final Iterator<File> files = Arrays.asList(bufferDir.listFiles()).iterator();
  
          return new Iterator<Event>() {
              private Event next = getNextEvent(files);
  
              @Override
              public boolean hasNext() {
                  return next != null;
              }
  
              @Override
              public Event next() {
                  Event toReturn = next;
                  next = getNextEvent(files);
                  return toReturn;
              }
  
              @Override
              public void remove() {
                  throw new UnsupportedOperationException();
              }
          };
      }
docs: Returns an Iterator of Events that are stored on disk <b>at the point in time this method
  is called</b>. Note that files may not deserialize correctly, may be corrupted,
  or may be missing on disk by the time we attempt to open them - so some care is taken to
  only return valid {@link Event}s.
  
  If Events are written to disk after this Iterator is created they <b>will not</b> be returned
  by this Iterator.
  
  @return Iterator of Events on disk