我从WCF服务返回一个流,并尝试将其转换为Web应用程序中的MemoryStream.But,在这里使用WCF服务,我得到的结果是“MessageBodyStream”,我期待“系统”。 IO.Stream”。如何将其转换为MemoryStream?
答案 0 :(得分:6)
要将MessageBodyStream转换为MemoryStream,请按照下列步骤操作:
MemoryStream stream = new MemoryStream();
messageStream.CopyTo(stream); // Assuming messageStream is your MessageBodyStream
stream.Position = 0; // Be sure to set the position to 0 before using it.
你完成了!!
希望这有帮助。
答案 1 :(得分:2)
有时流进来,你不知道它们有多大,因为使用这段代码:
public static byte[] ReadToEnd(System.IO.Stream stream)
{
long originalPosition = stream.Position;
byte[] readBuffer = new byte[4096];
int totalBytesRead = 0;
int bytesRead;
while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0)
{
totalBytesRead += bytesRead;
if (totalBytesRead == readBuffer.Length)
{
int nextByte = stream.ReadByte();
if (nextByte != -1)
{
byte[] temp = new byte[readBuffer.Length * 2];
Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);
Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);
readBuffer = temp;
totalBytesRead++;
}
}
}
byte[] buffer = readBuffer;
if (readBuffer.Length != totalBytesRead)
{
buffer = new byte[totalBytesRead];
Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead);
}
return buffer;
}
然后,一旦有了字节数组,就可以将其转换为内存流......
byte[] myBytes = ReadToEnd(theStream);
Stream theMemStream = new MemoryStream(myBytes, 0, myBytes.Length);
答案 2 :(得分:1)
Message.BodyStream
的类型为Stream
。
您需要将整个视频流读入MemoryStream
以进行转换。
我不知道这是否是你真正想要的,但你可以简单地将值分配给MemoryStream
变量,而MemoryStream
继承自Stream
。
答案 3 :(得分:0)
看起来示例代码中的缓冲区每次在内部循环中加长时都会加倍。而不是
byte[] temp = new byte[readBuffer.Length * 2]
最好不要添加而不是乘法,例如
byte[] temp = new byte[readBuffer.Length + 4096]
理想情况下,我们可能会在这里使用变量而不是硬编码值,但我希望这可以说明这一点。