InputStream не будет сброшен к началу - PullRequest
12 голосов
/ 16 июля 2011
InputStream data = realResponse.getEntity().getContent();
byte[] preview = new byte[100];
data.read(preview, 0, 100);

// Теперь я хочу обратиться к InputStream позже, но я хочу, чтобы он был в начале потока, а не в 100 байтах. Я пробовал mark() в 100, а затем reset()Я прочитал первые 100 байтов, но это тоже не сработало.

Есть идеи?Вероятно, глупая ошибка .. просто не вижу ее.

Ответы [ 2 ]

21 голосов
/ 16 июля 2011

Когда вы используете mark() объекта java.io.InputStream , вы должны проверить методом markSupported(), действительно ли ваш InputStream поддерживает использование mark.Согласно 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();
1 голос
/ 16 июля 2011

Если 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) - это , а не , гарантированно считывающее 100 байтов за один раз, оно может прочитать меньше.

...