         if part.unpacked
           loop
             b = buffer[offset]
-            @bytesRead++
+            @_bytesRead++
             offset++
             @value[@offset] = b
             @offset += @increment
             break if @offset is @terminal
-            return @bytesRead - start if offset is end
+            return @_bytesRead - start if offset is end
 
         # Otherwise we're packing bytes into an unsigned integer, the most
         # common case.
         else
           loop
             b = buffer[offset]
-            @bytesRead++
+            @_bytesRead++
             offset++
             @value += Math.pow(256, @offset) * b
             @offset += @increment
             break if @offset == @terminal
-            return @bytesRead - start if offset is end
+            return @_bytesRead - start if offset is end
 
         # Unpack the field value.
         bytes = value = @value

  read: (buffer, offset, length) ->
    offset or= 0
    length or= buffer.length
    start    = @bytesRead
    end      = offset + length

    # We set the pattern to null when all the fields have been read, so while

          @nextField()
          @nextValue()

    @_bytesRead - start

  close: ->
    @emit "close"
