我需要Java的PushbackInputStream的C#实现。我已经制作了我自己的基本版本,但我想知道是否有一个经过良好测试且性能良好的版本已经可用。碰巧我总是推回我读过的相同字节,所以它只需要能够向后重新定位,缓冲到我指定的字节数。 (比如Java的带有标记和重置方法的BufferedInputStream)。
更新:我应该补充一点,我不能简单地重新定位流,因为CanSeek可能是假的。 (例如,当输入蒸汽为NetworkStream)
时答案 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)
会好的。