为什么这个简单的 MemoryStream.Write() 实验失败了?
Why is this simple MemoryStream.Write() experiment failing?
我对一个使用可写 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
文本 "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
属性 确定输出中的当前偏移量。
我对一个使用可写 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
文本 "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
属性 确定输出中的当前偏移量。