@Override
  public synchronized String toString() {
    StringBuilder res = new StringBuilder();
    res.append("StreamingAeadDecryptingStream")
        .append("\nsegmentNr:")
        .append(segmentNr)
        .append("\nciphertextSegmentSize:")
        .append(ciphertextSegmentSize)
        .append("\nheaderRead:")
        .append(headerRead)
        .append("\nendOfCiphertext:")
        .append(endOfCiphertext)
        .append("\nendOfPlaintext:")
        .append(endOfPlaintext)
        .append("\ndecryptionErrorOccured:")
        .append(decryptionErrorOccured)
        .append("\nciphertextSgement")
        .append(" position:")
        .append(ciphertextSegment.position())
        .append(" limit:")
        .append(ciphertextSegment.limit())
        .append("\nplaintextSegment")
        .append(" position:")
        .append(plaintextSegment.position())
        .append(" limit:")
        .append(plaintextSegment.limit());
    return res.toString();
  }
Skips over and discards <code>n</code> bytes of plaintext from the input stream. The
implementation reads and decrypts the plaintext that is skipped. Hence skipping a large number
of bytes is slow.

<p>Returns the number of bytes skipped. This number can be smaller than the number of bytes
requested. This can happend for a number of reasons: e.g., this happens when the underlying
stream is non-blocking and not enough bytes are available or when the stream reaches the end of
the stream.

@throws IOException when an exception occurs while reading from {@code in} or when the
    ciphertext is corrupt. Currently all corrupt ciphertext will be detected. However this
    behaviour may change.
java_src/src/main/java/com/google/crypto/tink/subtle/StreamingAeadDecryptingStream.java