簡體   English   中英

兩次讀取 InputStream 的一部分

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM