public static void WriteStructs <T>(this Stream input, T[] value, Int32 offset, Int32 count) where T : unmanaged
        {
            if (Asserts.InRange(count, 0, value.Length - offset) < 1)
            {
                return;
            }

            unsafe
            {
                Int32 entrySize = UnsafeTypeCache <T> .UnsafeSize;
                using (UnsafeTypeCache <Byte> .ChangeArrayType(value, entrySize))
                    input.Write((Byte[])(Object)value, offset * entrySize, count * entrySize);
            }
        }
        public static T[] ReadStructs <T>(this Stream input, Int32 count) where T : unmanaged
        {
            if (count < 1)
            {
                return(new T[0]);
            }

            unsafe
            {
                Array result    = new T[count];
                Int32 entrySize = UnsafeTypeCache <T> .UnsafeSize;
                using (UnsafeTypeCache <Byte> .ChangeArrayType(result, entrySize))
                    input.EnsureRead((Byte[])result, 0, result.Length);
                return((T[])result);
            }
        }