这个问题可能是通用的,但我试图理解这里的主要含义。
我正在尝试使用 BCEL 库进行一些字节码工程,并且部分工作流程需要我多次读取相同的字节码文件(从头开始)。流程如下
// 1. Get Input Stream
// 2. Do some work
// 3. Finish
// 4. Do some other work.
在第 4 步,我需要重置标记或获取流,就好像它从头开始一样。我知道以下选择。
BufferedInputStream
1) 使用- 获得“重置为无效标记”IOException 的机会来包装流
2) 使用 ByteArrayInputStream 包装它 - 即使一些在线研究表明它是错误的,它也总是有效?
getInputStream()
3)如果我需要再次从流中读取,只需调用。
我试图了解哪个选项对我更好。我不想使用 BufferedInputStream 因为我不知道最后一个mark
被调用的位置,所以调用reset
更高的标记位置会导致 IOException。我更喜欢使用 ByteArrayInputStream 因为它需要对我进行最少的代码更改,但是有人可以建议选项#2 还是选项#3 会更好吗?
我知道mark() 和reset() 的实现在JDKByteArrayInputStream
和BufferedInputStream
JDK 中是不同的。
问候