private IDataReader Sanitize(long startOffset, int length, ICollection <uint> sanitizedPositions)
        {
            var window = new byte[length];

            _dataReader.Read(window, 0, length);
            //find 00 00 03 then discard the third byte (03)
            int dstPos = SanitizeWindow(window, sanitizedPositions);

            // Remove trailing zeros bytes
            // FIXME: this fragment contains a prevention for emtpy (zero byte) packets!!
            while ((dstPos > 1) && (window[dstPos - 1] == 0))
            {
                dstPos--;
            }
            return(new ByteArrayDataReader(window, _dataReader.GetDataPacket(startOffset, dstPos)));
        }
        public void GetStuffingBytes(int numBytes)
        {
            // Read stuffing bytes
            var b         = new byte[numBytes];
            int bytesRead = _dataReader.Read(b, 0, b.Length);

            _dataReader.Position += bytesRead;
            // In case fewer bytes were read, truncate the data
            if (bytesRead != b.Length)
            {
                var subArray = new byte[bytesRead];
                Array.Copy(b, subArray, bytesRead);
                b = subArray;
            }
            // Add and verify stuffing bytes attribute
            Result.AddAttribute(Mpeg2SystemHeaderParser.Attribute.StuffingBytes, b, _stuffingBytesResultFormatter);
        }