@Override
 public synchronized void mark(int readlimit) {
   super.mark(readlimit);
   if (markSupported()) {
     markedStreamPosition = streamPosition;
     markedBlockPosition = blockPosition;
   }
 }
 @Override
 public void mark(int readlimit) {
   super.mark(readlimit);
   if (markSupported()) {
     try {
       digestLastMarked = (MessageDigest) digest.clone();
     } catch (CloneNotSupportedException e) { // should never occur
       throw new IllegalStateException("unexpected", e);
     }
   }
 }