aeron-client/src/main/java/io/aeron/logbuffer/TermReader.java
public static int read(
        final UnsafeBuffer termBuffer,
        final int termOffset,
        final FragmentHandler handler,
        final int fragmentsLimit,
        final Header header,
        final ErrorHandler errorHandler,
        final long currentPosition,
        final Position subscriberPosition)
    {
        int fragmentsRead = 0;
        int offset = termOffset;
        final int capacity = termBuffer.capacity();
        header.buffer(termBuffer);

        try
        {
            while (fragmentsRead < fragmentsLimit && offset < capacity)
            {
                final int frameLength = frameLengthVolatile(termBuffer, offset);
                if (frameLength <= 0)
                {
                    break;
                }

                final int frameOffset = offset;
                offset += BitUtil.align(frameLength, FRAME_ALIGNMENT);

                if (!isPaddingFrame(termBuffer, frameOffset))
                {
                    header.offset(frameOffset);
                    handler.onFragment(termBuffer, frameOffset + HEADER_LENGTH, frameLength - HEADER_LENGTH, header);

                    ++fragmentsRead;
                }
            }
        }
        catch (final Throwable t)
        {
            errorHandler.onError(t);
        }
        finally
        {
            final long newPosition = currentPosition + (offset - termOffset);
            if (newPosition > currentPosition)
            {
                subscriberPosition.setOrdered(newPosition);
            }
        }

        return fragmentsRead;
    }
public static int read(
        final UnsafeBuffer termBuffer,
        final int termOffset,
        final FragmentHandler handler,
        final int fragmentsLimit,
        final Header header,
        final ErrorHandler errorHandler,
        final long currentPosition,
        final Position subscriberPosition)
    {
        int fragmentsRead = 0;
        int offset = termOffset;
        final int capacity = termBuffer.capacity();
        header.buffer(termBuffer);

        try
        {
            while (fragmentsRead < fragmentsLimit && offset < capacity)
            {
                final int frameLength = frameLengthVolatile(termBuffer, offset);
                if (frameLength <= 0)
                {
                    break;
                }

                final int frameOffset = offset;
                offset += BitUtil.align(frameLength, FRAME_ALIGNMENT);

                if (!isPaddingFrame(termBuffer, frameOffset))
                {
                    header.offset(frameOffset);
                    handler.onFragment(termBuffer, frameOffset + HEADER_LENGTH, frameLength - HEADER_LENGTH, header);

                    ++fragmentsRead;
                }
            }
        }
        catch (final Throwable t)
        {
            errorHandler.onError(t);
        }
        finally
        {
            final long newPosition = currentPosition + (offset - termOffset);
            if (newPosition > currentPosition)
            {
                subscriberPosition.setOrdered(newPosition);
            }
        }

        return fragmentsRead;
    }
public static int read ( final UnsafeBuffer termBuffer , final int termOffset , final FragmentHandler handler , final int fragmentsLimit , final Header header , final ErrorHandler errorHandler , final long currentPosition , final Position subscriberPosition ) { int fragmentsRead = 0 ; int offset = termOffset ; final int capacity = termBuffer . capacity ( ) ; header . buffer ( termBuffer ) ; try { while ( fragmentsRead < fragmentsLimit && offset < capacity ) { final int frameLength = frameLengthVolatile ( termBuffer , offset ) ; if ( frameLength <= 0 ) { break ; } final int frameOffset = offset ; offset += BitUtil . align ( frameLength , FRAME_ALIGNMENT ) ; if ( ! isPaddingFrame ( termBuffer , frameOffset ) ) { header . offset ( frameOffset ) ; handler . onFragment ( termBuffer , frameOffset + HEADER_LENGTH , frameLength - HEADER_LENGTH , header ) ; ++ fragmentsRead ; } } } catch ( final Throwable t ) { errorHandler . onError ( t ) ; } finally { final long newPosition = currentPosition + ( offset - termOffset ) ; if ( newPosition > currentPosition ) { subscriberPosition . setOrdered ( newPosition ) ; } } return fragmentsRead ; }
Reads data from a term in a log buffer and updates a passed {@link Position} so progress is not lost in the
event of an exception.

@param termBuffer         to be read for fragments.
@param termOffset         within the buffer that the read should begin.
@param handler            the handler for data that has been read
@param fragmentsLimit     limit the number of fragments read.
@param header             to be used for mapping over the header for a given fragment.
@param errorHandler       to be notified if an error occurs during the callback.
@param currentPosition    prior to reading further fragments
@param subscriberPosition to be updated after reading with new position
@return the number of fragments read
Reads data from a term in a log buffer and updates a passed { @link Position } so progress is not lost in the event of an exception .