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); } }