private boolean parseChunkLength()

in hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Input.java [3320:3390]


    private boolean parseChunkLength()
            throws IOException {
        if (_isLastChunk)
            return false;

        int code = _offset < _length ? (_buffer[_offset++] & 0xff) : read();

        switch (code) {
            case BC_STRING_CHUNK:
                _isLastChunk = false;

                _chunkLength = (read() << 8) + read();
                break;

            case 'S':
                _isLastChunk = true;

                _chunkLength = (read() << 8) + read();
                break;

            case 0x00:
            case 0x01:
            case 0x02:
            case 0x03:
            case 0x04:
            case 0x05:
            case 0x06:
            case 0x07:
            case 0x08:
            case 0x09:
            case 0x0a:
            case 0x0b:
            case 0x0c:
            case 0x0d:
            case 0x0e:
            case 0x0f:

            case 0x10:
            case 0x11:
            case 0x12:
            case 0x13:
            case 0x14:
            case 0x15:
            case 0x16:
            case 0x17:
            case 0x18:
            case 0x19:
            case 0x1a:
            case 0x1b:
            case 0x1c:
            case 0x1d:
            case 0x1e:
            case 0x1f:
                _isLastChunk = true;
                _chunkLength = code - 0x00;
                break;

            case 0x30:
            case 0x31:
            case 0x32:
            case 0x33:
                _isLastChunk = true;
                _chunkLength = (code - 0x30) * 256 + read();
                break;

            default:
                throw expect("string", code);
        }

        return true;
    }