2012-05-16 50 views
0

我正在使用DataInputStream讀取視頻文件。然後,我使用一個字節數組爲每個幀逐個讀取數據,然後連續顯示它們。我的問題是,如果我想再次看到前一幀,或者是未來的幀,該怎麼辦?是否有可能退後一步,還是有其他可行的方式?在Java中的DataInputStream中來回步進

+0

用緩衝保存數據 – PeterMmm

+0

爲什麼你不保存處理幀數據的堆棧我的意思是緩衝區? –

+0

我可以存儲數據..但我希望避免這種情況,因爲爲所有幀存儲字節數組所需的總磁盤空間將是巨大的..這就是爲什麼查詢.. –

回答

2

我會爲此使用內存映射方法。如果你知道每個幀的大小,並且它是固定的,沒有理由你可以跳過(向前/向後),並簡單地映射該幀(或幀序列)。

+2

沒錯。流接口的全部要點是單向順序訪問(因此名稱)。 –

+0

@Nim這就是我不知道的,是的,框架的大小是恆定的,如果流是以數組的形式存在,我可以向後/向前走,但是我認爲它不是(或者是? )。請賜教,我該怎麼做。我當然知道每幀使用的字節數組的確切長度。 –

+0

@ParagGoel,內存映射文件就是這樣,它允許你從文件中「映射」一個塊到內存中,並像數組一樣訪問。假設每個幀都是1024個字節,爲了「讀取」前10個幀,您需要在文件偏移0處映射一個10 * 1024字節的塊,然後從偏移量10240處讀取下一個10等。應該首先閱讀關於內存映射文件訪問的內容,我認爲它會很有啓發性。 – Nim

0

作爲一個「簡單」的解決方案,你可以一個PushbackInputStream包裝你DataInputStream。但我不會依賴這一點,但寫下我自己的緩衝策略。你爲什麼不把最後一幀緩存在內存中?

+0

我應該能夠訪問任何幀我已經訪問到現在,不僅是前一個,這就是爲什麼我認爲它是無用的緩存前一幀。但它看起來像PushbackInputStream是有前途的.. –

+0

@ParagGoel,它需要你有所有的字節推回來。即如果你想要回幀10幀,你需要保持所有的數據推回到流中。 – Nim

+0

所以我想我將不得不這樣做,否則將所有內容都存儲在內存中或花時間重新計算。 –