web-dev-qa-db-ja.com

InputStreamは最初にリセットされません

InputStream data = realResponse.getEntity().getContent();
byte[] preview = new byte[100];
data.read(preview, 0, 100);

//後でInputStreamを参照したいのですが、100バイトではなく、ストリームの最初から参照したいのです。100でmark()を試し、その後reset()を試しました。最初の100バイトを読みましたが、それも機能しません。

何か案は?おそらくばかげた間違い..それを見ないだけです。

12
Du3

Java.io.InputStream オブジェクトのmark()を使用する場合、InputStreamが実際にマークの使用をサポートしているかどうかをmarkSupported()メソッドで確認する必要があります。 APIによると、InputStreamクラスはそうではありませんが、 Java.io.BufferedInputStream クラスはそうします。たぶん、次のようなBufferedInputStreamオブジェクト内にストリームを埋め込む必要があります。

InputStream data = new BufferedInputStream(realResponse.getEntity().getContent());
// data.markSupported() should return "true" now
data.mark(some_size);
// work with "data" now
...
data.reset();
21
Progman

InputStreamがマークをサポートしている場合(markSupported()メソッドで確認できます)、以下が機能するはずです。

_InputStream data = realResponse.getEntity().getContent();
byte[] preview = new byte[100];
data.mark(100);
data.read(preview, 0, 100);
data.reset();
_

ただし、data.read(preview, 0, 100)not一度に100バイトを読み取ることが保証されているため、読み取りが少なくなる可能性があることに注意してください。

1
Lucero