code: public void unread() throws IOException {
          mPushback++;
  
          if (mPushback > mMaxPushback - 2) {
              throw new IOException(this.getClass().getName() + 
                                    ": pushback exceeded " + (mMaxPushback - 2));
          }
  
          if ((--mCursor) < 0) mCursor += mMaxPushback;
  
          if (mCursor > 0) {
              mPosition = mPositions[mCursor - 1];
          }
          else {
              mPosition = mPositions[mMaxPushback - 1];
          }
  
          unreadHook(mCharacters[mCursor]);
      }
docs: Unread the last character read.
  
  <p>Unlike PushbackReader, unread does not allow arbitrary characters to
  to be unread. Rather, it functions like an undo operation.
  
  @see java.io.PushbackReader#unread(int)