           @nextField()
           @nextValue()
 
+    # Return the number of bytes read in this iteration.
     @_bytesRead - start
 
   close: ->

      # If we've not yet hit our terminator, check for the terminator. If we've
      # hit the terminator, and we do not have a maximum size to fill, then
      # terminate by setting up the array to terminate.
      if not @terminated
        if part.terminator.charCodeAt(0) == value
          @terminated = true
          # A maximum length value means to repeat until the terminator, but a
          # specific length value means that the zero terminated string occupies
          # a field that has a fixed length, so we need to skip the used bytes.
          if @repeat == Number.MAX_VALUE
            @repeat = @index + 1
          else

            break if @offset == @terminal
            return @_bytesRead - start if offset is end

        # Unpack the field value. Perform our basic transformations. That is,
        # convert from a byte array to a JavaScript primitive, or turn a byte
        # array into a hex string.
        #
        # Resist the urge to implement these conversions with pipelines. It
        # keeps occuring to you, but those transitions are at a higher level of
        # abstraction, primairly for operations on gathered byte arrays. These
        # transitions need to take place immediately to populate those arrays.

        # By default, value is as it is.
        bytes = value = @value

        # Create a hex string.
