DataSet知道如何通过WriteXml()序列化到流。
我有一个想要可读流的对象。如何将DataSet连接到其他对象?
管道类比:假设1/2“铜管有一个”公“出口,阀门也有一个”公“接头。为了连接两个,我需要一个适配器 - 两端是母头。
我正在想象一个多线程感知的AdapterStream类。内部流用固定缓冲区实现,比如说8k字节。在一个线程上,我使用该AdaterStream的实例调用WriteXml()。 WriteXml的实现重复调用Write()到流,直到它完成。但是当缓冲区已满时,AdapterStream会阻塞,并等待直到通过调用Read()来清除缓冲区。在一个单独的线程中,应用程序调用该AdapterStream上的Read(),直到它返回零。
如果缓冲区为空,则表示Read()不能返回零。当写入端发出EOF信号时,它只能返回零。 (可能使用Close()或WriteEof()方法)。
您需要使用ManualResetEvent在Write()和Read()之间发出信号。
写起来并不难。但是,这样的事情存在吗?
像the BlockingStream Stephen Taub provided in MSDN Magazine这样的东西,除了没有无限的缓冲区分配。
答案 0 :(得分:0)
我发现没有这样的流,最后写了一个。
BUT!
使用.NET 3.5中的匿名管道支持,有一种更简单,通用的方法来解决这个问题:
I-need-to-return-a-stream-but-component-X-wants-to-write-to-one。