@Override
    public <T> T mergeObject(T value, final Schema<T> schema) throws IOException
    {
        if (decodeNestedMessageAsGroup)
            return mergeObjectEncodedAsGroup(value, schema);

        final int length = readRawVarint32();
        if (length < 0)
            throw ProtobufException.negativeSize();

        if (buffer.remaining() < length)
            throw ProtobufException.misreportedSize();

        ByteBuffer dup = buffer.slice();
        dup.limit(length);

        // save old limit
        // final int oldLimit = this.limit;

        // this.limit = offset + length;

        if (value == null)
            value = schema.newMessage();
        ByteBufferInput nestedInput = new ByteBufferInput(dup, decodeNestedMessageAsGroup);
        schema.mergeFrom(nestedInput, value);
        if (!schema.isInitialized(value))
            throw new UninitializedMessageException(value, schema);
        nestedInput.checkLastTagWas(0);
        // checkLastTagWas(0);

        // restore old limit
        // this.limit = oldLimit;

        buffer.position(buffer.position() + length);
        return value;
    }
Read an {@code sint64} field value from the internal buffer.
protostuff-core/src/main/java/io/protostuff/ByteBufferInput.java