簡體   English   中英

C#如何將MessageBodyStream轉換為MemoryStream?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM