2013-04-23 12 views
2

我想消耗在舊貨服務的流,例如,在服務的方法有一個流或作爲參數類似的方法(例如,爲了能夠將IDataReader的結果序列化爲流,然後反序列化對其他服務器端數據的引用)。發送流作爲在Apache的節儉C#中的屬性

我不認爲這是明確的可能,但我不知道是否有另一種方式來實現類似的東西。

謝謝。

+0

的[如何流從Python來C++使用Apache節儉的圖像](http://stackoverflow.com/questions/26739520/how-to-stream-an-image-from-python-to-c可能重複-using-apache-thrift) – JensG 2015-01-04 17:54:13

回答

2

Apache thrift不支持發送流。你可以得到最接近的是發送一個字節數組。

爲了實現流般的體驗使用節儉,你可以創建一個返回流的字節數組的形式下一部分的接口。

在C#語法它看起來像傳遞到ReadNextBlock在每次調用

interface MyService 
{  
    int OpenStream(string path); 

    byte[] ReadNextBlock(int openedStreamId, long maxBlockSize); 

} 

的OpenStream返回 「流ID」。在您的服務器端,您可以持有一個Dictionary(key - openStreamID,value - Stream),用於保持源流打開並從中讀取下一個塊。

您也可以創建客戶端一個輔助類,這將是流後裔,並且使用的OpenStream和ReadNextBlock獲取的實際數據。

+0

謝謝你 - 我唯一的保留是我希望服務器在需要時請求更多數據(類似於dataReader.Next()或Stream.GetBytes()) - 是否有任何如何做到這一點? – Ian 2013-04-23 14:28:43

+0

服務器已經有一個流,它可以做他想做的事情。客戶端可以重複調用ReadNextBlock,直到返回空數組。 – alex 2013-04-23 14:55:24