ホームページ  >  記事  >  Java  >  入力ストリームを変更せずに複数回読み取る方法は?

入力ストリームを変更せずに複数回読み取る方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-26 04:36:31362ブラウズ

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

順次読み取りのために入力ストリームを保存する

特定の環境では、入力ストリームを変更したり新しいストリームを作成したりせずに、入力ストリームから複数回読み取ることが必要になる場合があります。画像をダウンロードしてローカルに保存する場合などのシナリオ。幸いなことに、繰り返しアクセスするために入力ストリームを複製することは可能です。

1 つの方法では、org.apache.commons.io.IOUtils.copy メソッドを利用して、入力ストリームのコンテンツをバイト配列に転送します。このバイト配列は、ByteArrayInputStream を使用して繰り返し読み取ることができます。

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

そこから、次のいずれかのアプローチに従うことができます。

  • ByteArrayInputStream の繰り返し作成:

    while (needToReadAgain) {
      ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
      yourReadMethodHere(bais);
    }
  • ByteArrayInputStream のリセット:

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

注意: ストリーム全体をメモリにコピーすることは、メモリが枯渇する可能性があるため、大規模なストリームや無限のストリームには適切ではない可能性があります。このような場合、バッファーや別個のデータ構造を使用するなどの代替アプローチが必要になる場合があります。

以上が入力ストリームを変更せずに複数回読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。