public String readUTF()

in openwire-core/src/main/java/org/apache/activemq/openwire/buffer/DataByteArrayInputStream.java [318:380]


    public String readUTF() throws IOException {
        int length = readUnsignedShort();
        char[] characters = new char[length];
        int c;
        int c2;
        int c3;
        int count = 0;
        int total = pos + length;

        while (pos < total) {
            c = buf[pos] & 0xff;
            if (c > 127) {
                break;
            }
            pos++;
            characters[count++] = (char) c;
        }

        while (pos < total) {
            c = buf[pos] & 0xff;
            switch (c >> 4) {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                    pos++;
                    characters[count++] = (char) c;
                    break;
                case 12:
                case 13:
                    pos += 2;
                    if (pos > total) {
                        throw new UTFDataFormatException("bad string");
                    }
                    c2 = buf[pos - 1];
                    if ((c2 & 0xC0) != 0x80) {
                        throw new UTFDataFormatException("bad string");
                    }
                    characters[count++] = (char) (((c & 0x1F) << 6) | (c2 & 0x3F));
                    break;
                case 14:
                    pos += 3;
                    if (pos > total) {
                        throw new UTFDataFormatException("bad string");
                    }
                    c2 = buf[pos - 2];
                    c3 = buf[pos - 1];
                    if (((c2 & 0xC0) != 0x80) || ((c3 & 0xC0) != 0x80)) {
                        throw new UTFDataFormatException("bad string");
                    }
                    characters[count++] = (char) (((c & 0x0F) << 12) | ((c2 & 0x3F) << 6) | ((c3 & 0x3F) << 0));
                    break;
                default:
                    throw new UTFDataFormatException("bad string");
            }
        }

        return new String(characters, 0, count);
    }