2009-01-27 97 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