PushbackInputStream的C#实现

时间:2009-01-27 10:15:06

标签: c#

我需要Java的PushbackInputStream的C#实现。我已经制作了我自己的基本版本,但我想知道是否有一个经过良好测试且性能良好的版本已经可用。碰巧我总是推回我读过的相同字节,所以它只需要能够向后重新定位,缓冲到我指定的字节数。 (比如Java的带有标记和重置方法的BufferedInputStream)。

更新:我应该补充一点,我不能简单地重新定位流,因为CanSeek可能是假的。 (例如,当输入蒸汽为NetworkStream

4 个答案:

答案 0 :(得分:1)

将数据推送回流中的问题是,位于流 top 的任何读者可能已经拥有本地数据缓冲区。这使得这种方法非常脆弱。就个人而言,我会尽量避免这种情况,并使用数据结构,我不需要推回,或者可以使用单字节Peek等。

答案 1 :(得分:1)

你需要构建一个包装类,它既可以作为流,但可以支持最后X个字节的缓冲区,这样你至少可以在有限的距离内找回,或者在你所有的地方找不到流的东西。确实可以“将数据推回输入流”。

无论哪种方式,你都必须自己写点东西。

答案 2 :(得分:0)

你不能只使用System.IO.Stream并在从当前位置读取后向后搜索吗?

stream.Seek(-1, System.IO.SeekOrigin.Current)

其中-1可能是您想要返回多远的变量?

答案 3 :(得分:0)

只要流表明它支持搜索(CanSeek)然后

stream.Seek(-offset, System.IO.SeekOrigin.Current)

会好的。