Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取输入流的一部分两次_Java_Inputstream - Fatal编程技术网

Java 读取输入流的一部分两次

Java 读取输入流的一部分两次,java,inputstream,Java,Inputstream,我有一个ServletInputStream,它可能非常大,我想提取InputStream的前X字节,然后让流处于初始状态 现在我所做的是markSupported()、mark()和reset(),但是markSupported返回false,所以我需要实现另一种方法 描述了一种将输入流读取两次的解决方案,但问题是,我的流的大小可能非常大,并且我无法将其全部存储在内存中(此外,我不确定最大数组大小是否足够) 有没有办法只读取少量字节,然后将流置于初始状态。解决方法是使用我想要读取的X字节,然后

我有一个ServletInputStream,它可能非常大,我想提取InputStream的前X字节,然后让流处于初始状态

现在我所做的是markSupported()、mark()和reset(),但是markSupported返回false,所以我需要实现另一种方法

描述了一种将输入流读取两次的解决方案,但问题是,我的流的大小可能非常大,并且我无法将其全部存储在内存中(此外,我不确定最大数组大小是否足够)


有没有办法只读取少量字节,然后将流置于初始状态。解决方法是使用我想要读取的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的读取器,这不是一个选项。拉尔夫,谢谢,我已经做到了