[英]Read part of an InputStream twice
我有一個可能非常大的 ServletInputStream,我想提取 InputStream 的前 X 個字節,然后讓流處於初始狀態。
我現在所做的是 markSupported()、mark() 和 reset(),但是 markSupported 返回 false,所以我需要實現另一種方法。
這里描述 了一個解決方案來讀取輸入流兩次,但問題是我的流的大小可能非常大,而且我不能將其全部保存在內存中(而且我不確定最大數組大小是否足夠)。
有沒有辦法只讀取少量字節,然后將流置於其初始狀態。 解決方法是消耗我想要讀取的 X 字節,然后讓消耗的流除了以下過程(我想避免)之外傳遞 X 字節。
BufferedInputStream.markSupported()
返回 true(參見Javadoc )。 只需使用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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.