此问题是此Question
的后续问题我写了一个小方法来填充byte[]
就像MemoryStream
:
public static Stream FillWithPadding(Stream MS, int Count)
{
byte[] buffer = new byte[64];
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] = 0xFF;
}
while (Count > buffer.Length)
{
MS.Write(buffer, 0, buffer.Length);
Count -= buffer.Length;
}
MS.Write(buffer, 0, Count);
return MS;
}
public static byte[] FillWithPadding(byte[] Buffer, int Count)
{
using (MemoryStream MS = new MemoryStream())
{
MS.Write(Buffer, 0, Buffer.Length);
MemoryStream msw = FillWithPadding(MS, Count) as MemoryStream;
return msw.GetBuffer();
}
}
此代码无效!!
相反,它会在最后创建0xFF
+ 0x00
!
任何人都可以清理,为什么这不起作用?
答案 0 :(得分:4)
MemoryStream.GetBuffer()
返回MemoryStream用于存储数据的内部字节数组。最初它填充0,并通过Write's填充到流长度。
很可能你想使用MemoryStream.ToArray()代替将截断的缓冲区副本返回到实际长度。
答案 1 :(得分:0)
这就是Stream Now中的位置。 在写入之前使用MS.Position = 0.
public static Stream FillWithPadding(Stream MS, int Count)
{
byte[] buffer = new byte[64];
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] = 0xFF;
}
MS.Position = 0;
while (Count > buffer.Length)
{
MS.Write(buffer, 0, buffer.Length);
Count -= buffer.Length;
}
MS.Write(buffer, 0, Count);
return MS;
}