的问题
mark
/
reset
您不仅必须提前知道在这些调用之间读取的最大数据量,还必须知道您授权的代码是否会在内部使用该功能,从而使您的标记过时。代码不可能使用
做记号
/
重置
记住并恢复调用方以前的标记。
因此,虽然可以通过将总文件大小指定为最大值来解决最大值问题
readlimit
,在通过考试时,你永远不能依靠工作分数
InputStream
对于不显式记录的任意库函数,请不要使用
做记号
/
重置
内部功能。
此外,a
BufferedInputStream
获得
读取限制
匹配总文件大小不会比
ByteArrayInputStream
包装包含整个文件的数组,因为两者最终都会保持相同大小的缓冲区。
最好的解决方案是将整个类文件读入数组一次,然后直接使用该数组,例如,对于您控制下的代码,或者当您可以选择库(ASMs)时
ClassReader
支持使用字节数组而不是
输入流
,例如)。
如果你必须给一个
输入流
然后将字节数组包装到
字节数组输入流
需要时,但是
创建新的
字节数组输入流
每次都必须重新解析类文件。构建新的
字节数组输入流
成本不高,因为它是一个轻量级包装器,并且是可靠的,因为它不以任何方式依赖于旧输入流的状态。你甚至可以有多个
字节数组输入流
实例同时读取同一数组。
使命感
getInputStream()
如果您必须处理非常大的文件,而缓冲整个内容不是一个选项,那么这也是一个选项,然而,类文件不是这样。