Rumah  >  Artikel  >  Java  >  Bagaimana untuk Membaca dari Strim Input Berbilang Kali Tanpa Mengubah Suainya?

Bagaimana untuk Membaca dari Strim Input Berbilang Kali Tanpa Mengubah Suainya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-26 04:36:31362semak imbas

How to Read from an Input Stream Multiple Times Without Modifying it?

Memelihara Strim Input untuk Bacaan Berurutan

Membaca daripada aliran input berbilang kali tanpa mengubah suai atau mencipta strim baharu mungkin diperlukan dalam keadaan tertentu senario, seperti semasa memuat turun imej dan menyimpannya secara setempat. Nasib baik, adalah mungkin untuk menduplikasi strim input untuk akses berulang.

Satu pendekatan melibatkan penggunaan kaedah org.apache.commons.io.IOUtils.copy untuk memindahkan kandungan aliran input ke dalam tatasusunan bait. Tatasusunan bait ini kemudiannya boleh dibaca berulang kali menggunakan ByteArrayInputStream.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(in, baos);
byte[] bytes = baos.toByteArray();

Dari sana, anda boleh mengikuti mana-mana pendekatan:

  • Penciptaan Berulang ByteArrayInputStream:

    while (needToReadAgain) {
      ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
      yourReadMethodHere(bais);
    }
  • Tetapkan Semula ByteArrayInputStream:

    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    while (needToReadAgain) {
      bais.reset();
      yourReadMethodHere(bais);
    }

Awas: Menyalin strim penuh ke dalam ingatan mungkin tidak sesuai untuk strim besar atau tak terhingga kerana potensi keletihan memori. Pendekatan alternatif, seperti menggunakan penimbal atau struktur data yang berasingan, mungkin diperlukan dalam kes sedemikian.

Atas ialah kandungan terperinci Bagaimana untuk Membaca dari Strim Input Berbilang Kali Tanpa Mengubah Suainya?. 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