private String readString() throws JSONException {
        Kim kim;
        int from = 0;
        int thru = 0;
        int previousFrom = none;
        int previousThru = 0;
        if (bit()) {
            return getAndTick(this.stringkeep, this.bitreader).toString();
        }
        byte[] bytes = new byte[65536];
        boolean one = bit();
        this.substringkeep.reserve();
        while (true) {
            if (one) {
                from = thru;
                kim = (Kim) getAndTick(this.substringkeep, this.bitreader);
                thru = kim.copy(bytes, from);
                if (previousFrom != none) {
                    this.substringkeep.registerOne(new Kim(bytes, previousFrom,
                            previousThru + 1));
                }
                previousFrom = from;
                previousThru = thru;
                one = bit();
            } else {
                from = none;
                while (true) {
                    int c = this.substringhuff.read(this.bitreader);
                    if (c == end) {
                        break;
                    }
                    bytes[thru] = (byte) c;
                    thru += 1;
                    if (previousFrom != none) {
                        this.substringkeep.registerOne(new Kim(bytes,
                                previousFrom, previousThru + 1));
                        previousFrom = none;
                    }
                }
                if (!bit()) {
                    break;
                }
                one = true;
            }
        }
        if (thru == 0) {
            return "";
        }
        kim = new Kim(bytes, thru);
        this.stringkeep.register(kim);
        this.substringkeep.registerMany(kim);
        return kim.toString();
    }