Поиск в InputStream - PullRequest
       6

Поиск в InputStream

2 голосов
/ 05 августа 2011

Есть ли способ сделать эффективный поиск 2 фиксированных байтов на InputStream?

Фон

Мне приходится иметь дело с многочастным Http-трафиком на Android.(Motion JPEG с IP-камеры).

Я уже нашел несколько классов на anddev.org, чтобы справиться с этим.Сейчас я делаю некоторые улучшения производительности.Чтобы найти начало JPEG, мне нужно найти магическое число для JPEG (SOI = FFD8) в InputStream.

1 Ответ

0 голосов
/ 06 августа 2011

Поскольку вы не знаете, где в потоке находятся эти 2 байта, вам придется просмотреть весь ввод.Это означает, что ваша производительность будет по крайней мере линейной.Два найти два байта линейно просто:

static long search(InputStream inputStream) throws IOException {
    BufferedInputStream is = new BufferedInputStream(inputStream);
    int previous = is.read(read);
    long pos = 0;
    int current;
    while((current = is.read()) != -1) {
        pos++;
        if(previous == 0xff && current == 0xd8) {
            return pos;
        }
        last = current;
    }
    throw new RuntimeException("There ain't no pic in here.");
}
...