private String readString() {
		int size = readShort();
		byte[] buff = data;
		int p = pos, end = p + size;
		char[] chars = new char[size];
		int j = 0;
		for (; p < end; j++) {
			int x = buff[p++] & 0xff;
			if (x < 0x80) {
				chars[j] = (char) x;
			} else if (x >= 0xe0) {
				chars[j] = (char) (((x & 0xf) << 12) + ((buff[p++] & 0x3f) << 6) + (buff[p++] & 0x3f));
			} else {
				chars[j] = (char) (((x & 0x1f) << 6) + (buff[p++] & 0x3f));
			}
		}
		pos = p;
		return new String(chars, 0, j);
	}