我在java中读取输入流。一旦在输入流中到达文件末尾,流就会关闭,我无法再次使用相同的流。有没有办法让流保持打开,直到我在同一个流上进行进一步处理。
答案 0 :(得分:1)
不应仅仅因为您阅读到它的结尾而自动关闭流。您应该可以在开始时使用mark()
,然后致电reset()
以返回标记。但是,它取决于流是否支持。
如果您使用的是文件,则可能需要考虑使用RandomAccessFile
。如果它是来自网络的流,可能没有“倒带”它的概念 - 在这种情况下,您应该首先读取所有数据并将其复制到ByteArrayOutputStream
:然后您可以将其转换为字节数组,并根据需要创建尽可能多的ByteArrayInputStream
个数据。
答案 1 :(得分:1)
遇到流末尾时,流不会自动关闭。顺便说一句,我不知道为什么你要保持流打开,如果到达流的末尾。如果您计划从流中读取两次(由于某些奇怪的原因,在同一个流上进行两次迭代),您可以关闭第一个并在可能的情况下打开第二个(对于文件流来说足够简单)。另一种方法是读取整个数据并处理数据,以防您处理的数据不是太大(再次取决于您的应用程序特定需求)。