1
17
您可以修饰正在传递给的输入流 POIFS文件系统 当调用close()时,它用reset()响应:
测试用例
编辑2您可以在字节[]中读取整个文件(slurp模式),然后将其传递给bytearrayinputstream |
2
20
尝试BufferedInputStream,它将标记和重置功能添加到另一个输入流,并重写其关闭方法:
所以:
使用
|
3
4
这项工作正常:
其中getbytes如下所示:
|
4
2
使用下面的实现以获得更多的自定义使用-
|
5
1
“缓存”究竟是什么意思?是否希望不同的poifsffilesystem从流的开头开始?如果是这样,在Java代码中绝对没有缓存任何东西;它将由OS完成,只需打开一个新的流即可。 或者您想在第一个poifsffilesystem停止时继续读取?这不是缓存,很难做到。如果无法避免流被关闭,我唯一能想到的方法就是编写一个计算已读取多少字节的瘦包装器,然后打开一个新的流并跳过这些字节。但是当poifsfilesystem内部使用bufferedInputstream之类的东西时,这可能会失败。 |
6
1
如果文件不太大,请将其读取到
如果文件很大,那么您不应该在意,因为操作系统会尽可能为您做缓存。
[编辑]使用
Apache commons-io
以有效的方式将文件读取到字节数组中。不要使用
如果你想自己做,用
|
7
1
这是我将如何实现的,以便安全地与任何输入流一起使用:
|
8
1
这是可行的。ioutils是commons io的一部分。 |
9
1
这个答案重复前面的答案
1
γ
2
基于
要重用它,如果没有,就先关闭它。 但是,一个限制是,如果在读取原始流的全部内容之前关闭流,那么这个修饰器将具有不完整的数据,因此请确保在关闭前读取整个流。 |
10
0
我只是在这里添加我的解决方案,因为这对我很有用。它基本上是前两个答案的组合:)
|
masan · 通过蓝牙从Arduino到Android获取奇怪的数据 7 年前 |
Leo natros · 使用C将文件内容复制到另一个文件++ 7 年前 |
BigBug · 流<对象>到InputStream 7 年前 |