順次読み取りのために入力ストリームを保存する
特定の環境では、入力ストリームを変更したり新しいストリームを作成したりせずに、入力ストリームから複数回読み取ることが必要になる場合があります。画像をダウンロードしてローカルに保存する場合などのシナリオ。幸いなことに、繰り返しアクセスするために入力ストリームを複製することは可能です。
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 サイトの他の関連記事を参照してください。