code: public String readString() throws IOException {
  		StringBuilder result = new StringBuilder();
  		while (true) {
  			int c = r.read();
  			if (c < 0) {
  				throw new IllegalStateException("Premature end of stream");
  			} else if (c == '"') {
  				break;
  			} else if (c == '\\') {
  				int c2 = r.read();
  				if (c2 == '"' || c2 == '\\' || c2 == '/') {
  					result.append((char)c2);
  				} else if (c2 == 'b') {
  					result.append("\b");
  				} else if (c2 == 'f') {
  					result.append("\f");
  				} else if (c2 == 'n') {
  					result.append("\n");
  				} else if (c2 == 'r') {
  					result.append("\r");
  				} else if (c2 == 't') {
  					result.append("\t");
  				} else if (c2 == 'u') {
  					int d1 = r.read();
  					int d2 = r.read();
  					int d3 = r.read();
  					int d4 = r.read();
  					checkHexDigit(d1);
  					checkHexDigit(d2);
  					checkHexDigit(d3);
  					checkHexDigit(d4);
  					int e = Character.digit(d1, 16);
  					e = (e << 4) + Character.digit(d2, 16);
  					e = (e << 4) + Character.digit(d3, 16);
  					e = (e << 4) + Character.digit(d4, 16);
  					result.append((char)e);
  				}
  			} else {
  				result.append((char)c);
  			}
  		}
  		return result.toString();
  	}
docs: Reads a string from the stream
  @return the string
  @throws IOException if the stream could not be read