Java 读取输入流的一部分两次
我有一个ServletInputStream,它可能非常大,我想提取InputStream的前X字节,然后让流处于初始状态 现在我所做的是markSupported()、mark()和reset(),但是markSupported返回false,所以我需要实现另一种方法 描述了一种将输入流读取两次的解决方案,但问题是,我的流的大小可能非常大,并且我无法将其全部存储在内存中(此外,我不确定最大数组大小是否足够)Java 读取输入流的一部分两次,java,inputstream,Java,Inputstream,我有一个ServletInputStream,它可能非常大,我想提取InputStream的前X字节,然后让流处于初始状态 现在我所做的是markSupported()、mark()和reset(),但是markSupported返回false,所以我需要实现另一种方法 描述了一种将输入流读取两次的解决方案,但问题是,我的流的大小可能非常大,并且我无法将其全部存储在内存中(此外,我不确定最大数组大小是否足够) 有没有办法只读取少量字节,然后将流置于初始状态。解决方法是使用我想要读取的X字节,然后
有没有办法只读取少量字节,然后将流置于初始状态。解决方法是使用我想要读取的X字节,然后让使用的流除了以下过程(我想要避免)之外还传递X字节。
BufferedInputStream.markSupported()
返回true(请参阅)。只需使用BufferedInputStream
包装您的流,并设置大于X的标记限制。您看过java.io.PushbackInputStream
吗
如果我理解正确,那么它似乎非常适合您想要实现的目标,特别是如果您想要检查的字节位于流的开头
byte[] peekBuffer = new byte[n];
PushbackInputStream pis = new PushbackInputStream(yourStream, peekBuffer.length);
pis.read(peekBuffer);
// Examine peekBuffer
// Reinsert the peeked bytes.
pis.unread(peekBuffer);
如何读取所有的
ServletInputStream
,并将其保存到本地主机上的文件中?能否将输入流包装在BufferedInputStream中?然后,您可以将流标记为重置。尝试查找带有markSupported
true.Abra的读取器,这不是一个选项。拉尔夫,谢谢,我已经做到了