從網路檢索和儲存資料時,開發人員經常尋求有效的方法。一種這樣的方法涉及多次使用相同的輸入流。這就提出了一個問題:同一個輸入流是否可以讀取兩次?
複製輸入流
一個輸入流不能直接讀取兩次。但是,可以使用 org.apache.commons.io.IOUtils.copy 將其複製到位元組數組中。然後可以使用該陣列建立多個 ByteArrayInputStream 物件以供後續讀取。
使用Apache Commons IO 函式庫,以下是如何讀取輸入流兩次的範例:
<code class="java">ByteArrayOutputStream baos = new ByteArrayOutputStream(); org.apache.commons.io.IOUtils.copy(in, baos); byte[] bytes = baos.toByteArray(); // either while (needToReadAgain) { ByteArrayInputStream bais = new ByteArrayInputStream(bytes); yourReadMethodHere(bais); } // or ByteArrayInputStream bais = new ByteArrayInputStream(bytes); while (needToReadAgain) { bais.reset(); yourReadMethodHere(bais); }</code>
注意:雖然此方法適用於圖像等小型流,但它不適合大型或無限流,因為它可能會導致記憶體問題。
以上是你能讀取一個輸入流兩次嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!