是否有可能使BsonBinaryReader接受不可见的流(例如NetworkStream )?
因此,我不需要持久地保存所有数据,然后开始通过BsonBinaryReader解析数据,但是可以临时执行吗?
示例:
var response = new NetworkStream(MAGIC);
var reader = new BsonBinaryReader(response)
while (!reader.EndOfStream)
{
if (reader.GotEnoughData())
{
var bson = BsonSerializer.Deserialize<BsonDocument>(reader);
}
}发布于 2016-11-10 14:29:43
我使用来自https://stackoverflow.com/a/28036366/1435802的答案解决了这个问题,使用了一个16 to (最大BSON文档大小)缓冲区作为BsonBinaryReader的输入。
为了能够阅读到流的末尾,我使用了以下方法:
public static Task WhileNotEndOfStreamAsync(this Stream stream, Action action, CancellationToken token = default(CancellationToken))
{
return Task.Run(() => {
try
{
while (!token.IsCancellationRequested)
{
action();
}
}
catch (EndOfStreamException)
{
// Swallow the 'EndOfStream' Exception
}
}, token);
}读取数据直到EOS:
using (var response = new ReadSeekableStream(networkStream))
using (var reader = new BsonBinaryReader(response))
{
await response.WhileNotEndOfStreamAsync(() =>
{
var bson = BsonSerializer.Deserialize<BsonDocument>(reader);
}, token);
}https://stackoverflow.com/questions/40421597
复制相似问题