docs: public boolean recover() throws IOException {
  		if (!input.isCached()) {
  			throw new IllegalStateException("can't recover using input that isn't cached");
  		}
  
  		synchronized (input) {
  			// Seek a byte after last position
  			input.seek(pos + 1);
  
  			int tag = input.read();
  			while (tag != 28) {
  				if (tag == -1) {
  					// We've reached EOF, no more datasets to return
  					close();
  					return false;
  				}
  				tag = input.read();
  			}
  
  			pos = input.position() - 1;
  			input.seek(pos);
  
  			return true;
  		}
  	}