为什么这个简单的 MemoryStream.Write() 实验失败了?

Why is this simple MemoryStream.Write() experiment failing?

我对一个使用可写 System.IO.MemoryStream 的基本实验感到困惑,该实验基于给出 ArgumentException

的字节数组
  1. 数组newBytes用文字
  2. 初始化
  3. 内存流ms用数组初始化,可写标志设置为True
  4. 内存流在位置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 文本 "Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection."

显然内存流有Length: 5,在位置1写一个字节应该是完全可以的,为什么会出现异常?

MemoryStream.Write方法有三个参数:

  • buffer - 从
  • 写入数据的缓冲区
  • offset - 缓冲区中从零开始的字节偏移量,从此处开始将字节复制到当前流
  • count - 要写入的最大字节数

注意第二个参数是输入数组中的偏移量,不是输出数组中的偏移量。 MemoryStream.Position 属性 确定输出中的当前偏移量。