public CsvRow nextRow() throws IORuntimeException {
		List<String> currentFields;
		int fieldCount;
		while (false == finished) {
			currentFields = readLine();
			fieldCount = currentFields.size();
			if (fieldCount < 1) {
				// 空List表示读取结束
				break;
			}

			// 读取范围校验
			if(lineNo < config.beginLineNo){
				// 未达到读取起始行，继续
				continue;
			}
			if(lineNo > config.endLineNo){
				// 超出结束行，读取结束
				break;
			}

			// 跳过空行
			if (config.skipEmptyRows && fieldCount == 1 && currentFields.get(0).isEmpty()) {
				// [""]表示空行
				continue;
			}

			// 检查每行的字段数是否一致
			if (config.errorOnDifferentFieldCount) {
				if (firstLineFieldCount < 0) {
					firstLineFieldCount = fieldCount;
				} else if (fieldCount != firstLineFieldCount) {
					throw new IORuntimeException(String.format("Line %d has %d fields, but first line has %d fields", lineNo, fieldCount, firstLineFieldCount));
				}
			}

			// 记录最大字段数
			if (fieldCount > maxFieldCount) {
				maxFieldCount = fieldCount;
			}

			//初始化标题
			if (lineNo == config.headerLineNo && null == header) {
				initHeader(currentFields);
				// 作为标题行后，此行跳过，下一行做为第一行
				continue;
			}

			return new CsvRow(lineNo, null == header ? null : header.headerMap, currentFields);
		}

		return null;
	}
@Test
	public void parseEscapeTest(){
		// https://datatracker.ietf.org/doc/html/rfc4180#section-2
		// 第七条规则
		StringReader reader = StrUtil.getReader("\"b\"\"bb\"");
		CsvParser parser = new CsvParser(reader, null);
		CsvRow row = parser.nextRow();
		assertNotNull(row);
		assertEquals(1, row.size());
		assertEquals("b\"bb", row.get(0));
	}