code: public int read()
    {
      if (_length <= _offset) {
        if (_head == null)
          return -1;
  
        TempCharBuffer next = _head.getNext();
        if (_isFree)
          TempCharBuffer.free(_head);
        _head = next;
  
        if (_head == null)
          return -1;
        
        _buffer = _head.buffer();
        _length = _head.getLength();
        _offset = 0;
      }
  
      return _buffer[_offset++];
    }
docs: Reads the next character.