/// <summary>
        /// Lee el arreglo de bytes en la posicion dada
        /// </summary>
        /// <param name="position"></param>
        /// <returns></returns>
        public unsafe byte[] ReadRecord(int position)
        {
            Trace.Assert(position >= 0);
            if (position < HeaderCapacity)
            {
                MMRecordStruct *rec = (MMRecordStruct *)(ptrMemAccessor + position);

                if (rec->length > 0)
                {
                    byte[] arr = new byte[rec->length];
                    Marshal.Copy(mmPtr + position + RecordDataOffset, arr, 0, rec->length);
                    return(arr);
                }
            }
            return(null);
        }
        /// <summary>
        /// Escribe el arreglo de bytes en el bloque
        /// Valida el tamño de bloque
        /// Retorna
        /// </summary>
        /// <param name="position"></param>
        /// <param name="value"></param>
        /// <param name="length"></param>
        /// <returns>
        /// La posicion en caso de exito de lo contrario -1
        /// </returns>
        public unsafe int WriteRecord(int position, byte[] value, int length = -1)
        {
            Trace.Assert(position >= 0);

            MMRecordStruct *rec = (MMRecordStruct *)(ptrMemAccessor + position);

            if (length + RecordDataOffset <= rec->blockSize)
            {
                rec->length = length > 0 ? (Int16)length : (Int16)0;
                if (length > 0)
                {
                    WriteBytes(position + RecordDataOffset, value, length);
                }
                return(position);
            }
            return(-1);
        }
        /// <summary>
        /// Lee todos los punteros (posiciones) de distintos bloques
        /// Funcion de Bloque
        /// </summary>
        /// <param name="initialPosition"></param>
        /// <returns>
        /// Lista de todos los punteros de cada bloque
        /// </returns>
        public List <int> ReadRecordsPositions(int initialPosition = 512)
        {
            var position = initialPosition > 512 ? initialPosition : 512;

            List <int> values = new List <int>();

            while (position < HeaderSize)
            {
                unsafe
                {
                    MMRecordStruct *rec = (MMRecordStruct *)(ptrMemAccessor + position);
                    if (rec->length > 0)
                    {
                        values.Add(position);
                    }
                    position = position + rec->blockSize;
                }
            }
            return(values);
        }