private static KVPair ReadLineData(String line) throws KVException, IOException
	{
		if (line.isEmpty() || line.startsWith("//")) {
			return null;
		}
		
		if (!isValidStarter(line.charAt(0))) {
			throw new KVException("Line " + currentLine + " is invalid");
		}
		
		line = line.substring(1);
		int keyEndIndex = line.indexOf('\"');
		if (keyEndIndex == -1 || keyEndIndex == 0) {
			throw new KVException("Line " + currentLine + " is invalid");
		}
		String key = line.substring(0, keyEndIndex);
		KVElement value = null;
		line = line.substring(keyEndIndex + 1).trim();
		
		if (line.startsWith("\"") && line.indexOf("\"", 1) > 0) { //is this a string value?
			value = new KVString(line.substring(1, line.length() - 1));
		}
		else if (line.isEmpty()) { //this means it must be an array value
			value = ReadArrayData(reader.readLine());
		}
		
		if (value == null) {
			throw new KVException("Line " + currentLine + " is invalid");
		}
		
		return new KVPair(key, value);
	}