iMi*_*ink 15 java input stream
我正在处理一些Java代码,其中有一个我读过一次的InputStream然后我需要在同一个方法中再次读取它.
问题是我需要将它的位置重置为开头才能读取它两次.
我找到了解决问题的黑客解决方案:
is.mark(Integer.MAX_VALUE);
//Read the InputStream is fully
// { ... }
try
{
is.reset();
}
catch (IOException e)
{
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案会导致一些未经预料到的行为吗?或者它会愚蠢吗?
kdg*_*ory 10
如上所述,您无法保证,因为mark()不需要报告它是否成功.要获得保证,您必须先调用markSupported(),然后必须返回true.
同样如上所述,指定的读取限制非常危险.如果您碰巧使用缓冲内存的流,则可能会分配2GB缓冲区.另一方面,如果你恰好使用a FileInputStream,你就没事了.
更好的方法是使用BufferedInputStream带有显式缓冲区的a.