2011-04-13 38 views
3

我試圖從流頂部開始多次讀取java.io.InputStream我可以關閉/重新打開InputStream以模擬不支持標記的輸入流的標記/重置嗎?

顯然,對於流返回truemarkSupported()我可以嘗試使用mark(availableBytes),然後reset()從頂部再次讀取流。

大部分流的不支持標記和那些(例如java.io.BufferedInputStream)將數據複製到臨時字節排列構成的非內存消耗的術語漂亮等

如果我的方法接收java.io.InputStream作爲參數我可以關閉它,然後重新打開它重置相同的原始流到頂部,所以我可以再次閱讀它?

我找不到任何方式從原來寫入到InputStream內存除了做這一招(犛牛!)或臨時文件,並比打開新InputStream那些臨時地點,如果我需要再次讀取從頂部流。

回答

3

您可以關閉它,但重新打開同一個數據流到同一個數據而不在某處創建數據的顯式副本的唯一方法是確定您正在處理的哪個具體類型的InputStream(簡單),該數據流被初始化指向(可能很容易,很難或不可能取決於流類型和它的接口),然後添加代碼以實例化具有原始源輸入的具體流類型的新實例(不難,但也不如果有人創建了一個你不知道如何處理的自定義InputStream實現,那麼它非常易於維護且易於破壞)。

+0

你說得對,這對於'InputStream'來說不是微不足道的。然而,我意識到我實際上正在處理具有可用於標記/重置的API的ImageInputStream。 – parxier 2011-04-13 23:05:49

相關問題