code: private Object readValue(Type t) throws IOException {
  		switch (t) {
  		case START_OBJECT:
  			return parseObjectInternal();
  		
  		case START_ARRAY:
  			return parseArrayInternal();
  		
  		case STRING:
  			return lexer.readString();
  		
  		case NUMBER:
  			return lexer.readNumber();
  		
  		case TRUE:
  			return true;
  		
  		case FALSE:
  			return false;
  		
  		case NULL:
  			return null;
  			
  		default:
  			throw new IOException("Unexpected token: " + t);
  		}
  	}
docs: Reads a value for a given type
  @param t the type
  @return the value
  @throws IOException if the input stream could not be read or if
  the input stream contained an unexpected token