protected String parseString(Stream seekable) {
		// skip white space
		if (!skip(seekable)) {
			return null;
		}

		// format check
		if (seekable.current() != '"') {
			raise(new JsonParseException(
					"parse string fail,expected \" but got:" + seekable.current() + " parsed:" + parsed,
					this.excpetion()));
			return null;
		}

		// consume "
		seekable.next();

		// mark key start
		StringBuilder buffer = new StringBuilder();
		char previous = '"';

		// find next "
		while (seekable.more()) {
			// ignore non "
			if (seekable.current() != '"') {
				// update previous
				previous = seekable.current();

				// append it
				buffer.append(previous);
				seekable.next();
				continue;
			}

			// meet a ",be care escape
			if (previous == '\\') {
				// a escape,consume it
				buffer.append("\\\"");

				// advance it
				seekable.next();

				// udpate previous
				previous = '"';

				continue;
			}

			// an closed " ,consume it
			seekable.next();

			// instances it
			String string = buffer.toString();

			// cache back
			return string;
		}

		// mark exception
		raise(new JsonParseException("parse string fail,no closing\" found,paresd:" + parsed, this.excpetion()));

		return null;
	}