aeron-client/src/main/java/io/aeron/logbuffer/TermBlockScanner.java
public static int scan(final UnsafeBuffer termBuffer, final int termOffset, final int limitOffset)
    {
        int offset = termOffset;

        while (offset < limitOffset)
        {
            final int frameLength = frameLengthVolatile(termBuffer, offset);
            if (frameLength <= 0)
            {
                break;
            }

            final int alignedFrameLength = align(frameLength, FRAME_ALIGNMENT);

            if (isPaddingFrame(termBuffer, offset))
            {
                if (termOffset == offset)
                {
                    offset += alignedFrameLength;
                }

                break;
            }

            if (offset + alignedFrameLength > limitOffset)
            {
                break;
            }

            offset += alignedFrameLength;
        }

        return offset;
    }
public static int scan(final UnsafeBuffer termBuffer, final int termOffset, final int limitOffset)
    {
        int offset = termOffset;

        while (offset < limitOffset)
        {
            final int frameLength = frameLengthVolatile(termBuffer, offset);
            if (frameLength <= 0)
            {
                break;
            }

            final int alignedFrameLength = align(frameLength, FRAME_ALIGNMENT);

            if (isPaddingFrame(termBuffer, offset))
            {
                if (termOffset == offset)
                {
                    offset += alignedFrameLength;
                }

                break;
            }

            if (offset + alignedFrameLength > limitOffset)
            {
                break;
            }

            offset += alignedFrameLength;
        }

        return offset;
    }
Scan a term buffer for a block of message fragments from an offset up to a limitOffset.
<p>
A scan will terminate if a padding frame is encountered. If first frame in a scan is padding then a block
for the padding is notified. If the padding comes after the first frame in a scan then the scan terminates
at the offset the padding frame begins. Padding frames are delivered singularly in a block.
<p>
Padding frames may be for a greater range than the limit offset but only the header needs to be valid so
relevant length of the frame is {@link io.aeron.protocol.DataHeaderFlyweight#HEADER_LENGTH}.

@param termBuffer  to scan for message fragments.
@param termOffset  at which the scan should begin.
@param limitOffset at which the scan should stop.
@return the offset at which the scan terminated.