docs: public boolean load(InputStream settingStream) throws IOException {
  		this.groupedMap.clear();
  		BufferedReader reader = null;
  		try {
  			reader = IoUtil.getReader(settingStream, this.charset);
  			// 分组
  			String group = null;
  
  			String line;
  			while (true) {
  				line = reader.readLine();
  				if (line == null) {
  					break;
  				}
  				line = line.trim();
  				// 跳过注释行和空行
  				if (StrUtil.isBlank(line) || StrUtil.startWith(line, COMMENT_FLAG_PRE)) {
  					continue;
  				}
  
  				// 记录分组名
  				if (StrUtil.isSurround(line, CharUtil.BRACKET_START, CharUtil.BRACKET_END)) {
  					group = line.substring(1, line.length() - 1).trim();
  					continue;
  				}
  
  				final String[] keyValue = StrUtil.splitToArray(line, ASSIGN_FLAG, 2);
  				// 跳过不符合键值规范的行
  				if (keyValue.length < 2) {
  					continue;
  				}
  
  				String value = keyValue[1].trim();
  				// 替换值中的所有变量变量（变量必须是此行之前定义的变量，否则无法找到）
  				if (this.isUseVariable) {
  					value = replaceVar(group, value);
  				}
  				this.groupedMap.put(group, keyValue[0].trim(), value);
  			}
  		} finally {
  			IoUtil.close(reader);
  		}
  		return true;
  	}