ホームページ  >  記事  >  Java  >  入力ストリームを複数回読み取るにはどうすればよいですか?

入力ストリームを複数回読み取るにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 06:18:02926ブラウズ

 How to Read an Input Stream Multiple Times?

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

一般的な入力ストリームは線形に消費されるように設計されているため、入力ストリームを 2 回読み取ることは課題となります。これを容易にするために、次の戦略を検討してください。

バイト配列に変換

org.apache.commons.io.IOUtils.copy メソッドを利用して入力ストリームのデータを転送します。内容をバイト配列に変換します。このバイト配列から新しい ByteArrayInputStream を作成し、繰り返し読み取ります。

<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>

入力ストリームをリセット

または、各読み取り操作の後に入力ストリームをリセットします。これにより、中間バイト配列を作成せずにストリームを複数回反復処理できます。

<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>

注意

大規模なストリームを扱う場合は、メモリを考慮することが重要です。制約。上記の方法ではストリームをメモリにコピーしますが、このような場合には実行できない可能性があります。大規模なデータセットの場合は、一度に一定範囲のバイトを読み取るなどの他の戦略を検討してください。

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

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