有没有方法让 java.io.FileInputStream.read(byte[] b)读完了之后再把字节放回去?

就是一般FileInputStream.read(byte[] b)方法每运行一次,都会往后读b.length个字节么,下次运行该方法时会接着上次的地方往下读,不会再在从头开始读。我有没有什么办法让他下一次还是从文件头部开始读?

阅读 5.8k
5 个回答

找个支持mark / reset的InputStream, 比如 BufferedInputStream

这样的逻辑最好不要依赖于 InputStream,应该重新组织一下。比如说为什么要重新读取?如果要重新读取,上次读取的时候可不可以缓存起来?

我也遇到过类似的需求,比较简单的方案是先把所有数据读到一个字节数组里,然后就可以用ByteArrayInputStream来操作数据了。
如果数据非常大,内存比较紧缺的话,可以先把部分字节读到字节数组里,做完运算之后,把这部分数据放到ByteArrayInputStream中,然后和原来没读完的流组合成一个SequenceInputStream,然后就可以重新从头读起了。

MappedByteBuffer

可以使用RandomAccessFile

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题