1. ホーム
  2. java

[解決済み] 入力ストリームを2回読み込む

2022-04-28 22:31:11

質問

同じインプットストリームを2回読むにはどうしたらいいのでしょうか?どうにかしてコピーすることはできないのでしょうか?

Webから画像を取得し、ローカルに保存して、保存した画像を返す必要があります。ダウンロードしたコンテンツに対して新しいストリームを開始し、それを再び読み込む代わりに、同じストリームを使用する方が速いと思っただけです。

解決方法は?

を使用することができます。 org.apache.commons.io.IOUtils.copy を使ってInputStreamの内容をバイト配列にコピーし、ByteArrayInputStreamを使ってそのバイト配列から繰り返し読み込むことができます。例

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

// either
while (needToReadAgain) {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    yourReadMethodHere(bais);
}

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