[英]C# How to convert MessageBodyStream to MemoryStream?
我從WCF服務返回一個流,並嘗試將其轉換為Web應用程序中的MemoryStream.But,其中使用WCF服務,我從“MessageBodyStream”獲取結果,我期待“System.IO.Stream” ”。 我怎樣才能將其轉換為MemoryStream?
要將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.
你完成了!!
希望這可以幫助。
有時流進來,你不知道它們有多大,為此使用這段代碼:
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);
Message.BodyStream
屬於Stream
類型。
您需要將整個流讀入MemoryStream
才能進行轉換。
我不知道這是否是你真正想要的,但你可以簡單地將值賦給MemoryStream
變量,單個MemoryStream
繼承自Stream
。
看起來示例代碼中的緩沖區每次在內部循環中加長時都會加倍。 而不是
byte[] temp = new byte[readBuffer.Length * 2]
添加而不是乘法不是更好,例如
byte[] temp = new byte[readBuffer.Length + 4096]
理想情況下,我們可能會在這里使用變量而不是硬編碼值,但我希望這能說明問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.