code: public T peek() {
      if (peekedItem == null) {
        try {
          peekedItem = SerializableValue.of(getMarshaller(), super.next());
        } catch (NoSuchElementException e) {
          // ignore.
        } catch (IOException e) {
          throw new RuntimeException("Failed to read next input", e);
        }
      }
      return peekedItem == null ? null : peekedItem.getValue();
    }
docs: Returns the element that will be returned by {@link #next()} next. Or null if there is no next
  element. If null elements are allowed in the input, one can distinguish between the end of the
  input and a null element by calling {@link #hasNext()}
  
  @throws RuntimeException In the event that reading from input fails.