2013-08-23 24 views
0

我正在從NetworkStream中讀取XML數據,如下所示。如何向NetworkStream注入字符串,以便可以通過C#中的XmlReader.ReadAsync讀取該字符串?

using (XmlReader xmlReader = XmlReader.Create(stream, new XmlReaderSettings() { Async = true })) 
{ 
    try 
    {      
     while (await xmlReader.ReadAsync()) 
     { 
     ... 

我想打電話給stream.Inject("</stop>"),因此它可以在上面的while循環讀取。我知道我將不得不圍繞Stream編寫一個包裝類,並實施Inject方法並覆蓋ReadAsync方法。但我不知道如何實現這一點。有人會告訴我這是怎麼回事嗎(我無法想象在我的Inject方法中應該添加額外的字符串)?

+0

,爲什麼不關閉流(或通過返回的'Read' 0字節模擬您的包裝封閉流)? –

+0

如果我只是通過'stream.close()'在另一個方法中關閉流,我在'xmlReader.ReadAsync()'中讀取流時遇到'System.ObjectDisposedException'異常。 –

回答

-1

NetworkStream是一個Stream,這意味着您可以將任何數據塊寫入其中,包括XML字符串。當然,你必須做像一些轉換:如果您想提前停止它

byte[] data = System.Text.Encoding.UTF8.GetBytes(longXmlString); 
networkSteram.Write(data); 
+0

這不會將數據注入讀取流,這是OP想要的。一個'NetworkStream'實際上是作爲一個API在兩個**不相關的**流(一個輸入,一個輸出)上實現的;寫作與閱讀沒有任何關係。另外:許多流都是嚴格只讀或只寫的;再加上即使不是(即'FileStream'或類似的),你也會拋棄該位置,並可能覆蓋真實的數據。基本上:**不要這樣做**;這是完全錯誤的。 –

相關問題