Я сбит с толку базовым экспериментом, использующим записываемый System.IO.MemoryStream
на основе байтового массива, дающего ArgumentException
- Массив
newBytes
инициализируется литералом - поток памяти
ms
инициализируется с помощью массива, а флаг записи установлен в True
- Поток памяти записывается одним байтом в позиции 1
VB.net
Try
Dim newBytes() As Byte = {0, 128, 255, 128, 0}
Dim ms As New System.IO.MemoryStream(newBytes, True)
ms.Write({CByte(4)}, 1, 1)
Catch ex as Exception
End Try
C # .net
try
byte() newBytes = {0, 128, 255, 128, 0};
System.IO.MemoryStream ms = new System.IO.MemoryStream(newBytes, true);
ms.Write(byte(4), 1, 1);
catch Exception ex
end try
Исключением является ArgumentException
с текстом "Смещение и длина вышли за пределы массива или число превышает числоэлементы от индекса до конца исходной коллекции. "
Очевидно, что поток памяти имеет Length: 5
, и запись одного байта в позицию 1 должна быть вполне выполнимой, почему существует исключение?