Rumah  >  Artikel  >  Java  >  Bagaimana untuk Membaca Strim Input Berbilang Kali?

Bagaimana untuk Membaca Strim Input Berbilang Kali?

Susan Sarandon
Susan Sarandonasal
2024-10-26 06:18:02926semak imbas

 How to Read an Input Stream Multiple Times?

Memelihara Strim Input untuk Berbilang Bacaan

Membaca aliran input dua kali memberikan cabaran kerana aliran input biasa direka untuk digunakan secara linear. Untuk memudahkan ini, pertimbangkan strategi berikut:

Tukar kepada Array Byte

Gunakan kaedah org.apache.commons.io.IOUtils.copy untuk memindahkan aliran input kandungan kepada tatasusunan bait. Buat ByteArrayInputStream baharu daripada tatasusunan bait ini untuk membaca berulang kali daripadanya:

<code class="java">ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(in, baos);
byte[] bytes = baos.toByteArray();

// Read from byte array repeatedly
while (needToReadAgain) {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    yourReadMethodHere(bais);
}</code>

Tetapkan Semula Strim Input

Sebagai alternatif, tetapkan semula strim input selepas setiap operasi bacaan. Ini membolehkan anda mengulangi strim berbilang kali tanpa membuat tatasusunan bait perantaraan:

<code class="java">// Create ByteArrayInputStream from original input stream
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

// Read from input stream repeatedly
while (needToReadAgain) {
    bais.reset(); // Reset stream for subsequent reads
    yourReadMethodHere(bais);
}</code>

Awas

Apabila berurusan dengan strim besar, adalah penting untuk mempertimbangkan memori kekangan. Pendekatan di atas menyalin strim ke ingatan, yang mungkin tidak dapat dilaksanakan dalam kes sedemikian. Untuk set data yang besar, pertimbangkan strategi lain seperti membaca julat bait pada satu masa.

Atas ialah kandungan terperinci Bagaimana untuk Membaca Strim Input Berbilang Kali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn