2009-01-27 73 views
2

我需要一个Java的PushbackInputStream的C#实现。我已经做出了自己非常基本的一个,但是我想知道是否有某个地方已经有了经过良好测试和体面表现的版本。正如它发生的那样,我总是推回读取的相同字节,所以它只需要能够向后重新定位,缓冲到我指定的许多字节。 (如带有标记和重置方法的Java BufferedInputStream)。PushbackInputStream的C#实现

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

回答

0

难道你不能只使用System.IO.Stream并从当前位置读取后向后寻找?

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

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

+0

谢谢,但我不能保证CanSeek是真的 – 2009-01-27 10:30:36

0

只要流表示它支持寻求(CanSeek)然后

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

将被罚款。

+0

谢谢,但我不能保证CanSeek是真的 – 2009-01-27 10:52:31

1

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

1

您需要构建一个包装类,它或者作为流,但支持最后一个X字节的缓冲区,因此您至少可以在有限的距离内进行回溯,或者在您确实可以“将数据重新推回到输入流中”的位置进行回放。

无论哪种方式,你将不得不自己写东西。

+0

严格来说,我只是试图向后重新定位在一个不一定支持寻求支持。它是使用PushbackInputStream和BufferedInputStream的现有Java代码的一个端口,我不想完全重新设计它。 – 2009-01-27 10:46:16