code: private char nextChar() throws IOException {
  		if (missedChar != null) {
  			// RETURNS THE PREVIOUS PARSED CHAR
  			c = missedChar.charValue();
  			missedChar = null;
  
  		} else {
  			c = (char) in.read();
  
  			if (c == '\\') {
  				char c2 = (char) in.read();
  				if (c2 == 'u') {
  					// DECODE UNICODE CHAR
  					final StringBuilder buff = new StringBuilder();
  					for (int i = 0; i < 4; ++i)
  						buff.append((char) in.read());
  
  					cursor += 6;
  
  					return (char) Integer.parseInt(buff.toString(), 16);
  				} else {
  					// REMEMBER THE CURRENT CHAR TO RETURN NEXT TIME
  					missedChar = c2;
  				}
  			}
  		}
  
  		cursor++;
  
  		if (c == NEW_LINE) {
  			++lineNumber;
  			columnNumber = 0;
  		} else
  			++columnNumber;
  
  		return c;
  	}
  
  	public char lastChar() {
  		return c;
  	}
  
  	public String getValue() {
  		return value;
  	}
  
  	public int getLineNumber() {
  		return lineNumber;
  	}
  
  	public int getColumnNumber() {
  		return columnNumber;
  	}
  
  	public boolean hasNext() throws IOException {
  		return in.ready();
  	}
  }
docs: Returns the next character from the input stream. Handles Unicode decoding.