鍍金池/ 問答/Java/ 有沒有方法讓 java.io.FileInputStream.read(byte

有沒有方法讓 java.io.FileInputStream.read(byte[] b)讀完了之后再把字節(jié)放回去?

就是一般FileInputStream.read(byte[] b)方法每運(yùn)行一次,都會(huì)往后讀b.length個(gè)字節(jié)么,下次運(yùn)行該方法時(shí)會(huì)接著上次的地方往下讀,不會(huì)再在從頭開始讀。我有沒有什么辦法讓他下一次還是從文件頭部開始讀?

回答
編輯回答
厭遇

MappedByteBuffer

2017年3月11日 23:00
編輯回答
傲嬌范

可以使用RandomAccessFile

2017年2月28日 00:28
編輯回答
咕嚕嚕

我也遇到過類似的需求,比較簡(jiǎn)單的方案是先把所有數(shù)據(jù)讀到一個(gè)字節(jié)數(shù)組里,然后就可以用ByteArrayInputStream來操作數(shù)據(jù)了。
如果數(shù)據(jù)非常大,內(nèi)存比較緊缺的話,可以先把部分字節(jié)讀到字節(jié)數(shù)組里,做完運(yùn)算之后,把這部分?jǐn)?shù)據(jù)放到ByteArrayInputStream中,然后和原來沒讀完的流組合成一個(gè)SequenceInputStream,然后就可以重新從頭讀起了。

2017年6月30日 06:29
編輯回答
氕氘氚

找個(gè)支持mark / reset的InputStream, 比如 BufferedInputStream

2017年8月28日 04:48
編輯回答
別逞強(qiáng)

這樣的邏輯最好不要依賴于 InputStream,應(yīng)該重新組織一下。比如說為什么要重新讀取?如果要重新讀取,上次讀取的時(shí)候可不可以緩存起來?

2018年8月7日 18:50