Эффективный способ поиска потокового аудио по сети с помощью InputStream

Я воспроизводю аудиофайл, используя jlGui BasicPlayer (, он основан на Javasound ). Файл находится в общем ресурсе Samba, и я использую Jcifs для доступа к нему. Это дает мне InputStream.

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(... );

SmbFile f = new SmbFile(... );
SmbFileInputStream audioIn = new SmbFileInputStream(f);

int bufSize = 8096;//should I use f.length() here?
audioBIS = new BufferedInputStream(audioIn, bufSize);

audioBIS.mark(f.length());

    //call BasicPlayer
play(audioBIS);

Мне нужно иметь возможность позиционировать указатель в любом месте файла, как и в любом обычном проигрывателе. Единственное решение, которое я мог придумать, это использовать BufferedInputStreamи комбинацию метки/сброса/пропуска каждый раз, когда мне нужно изменить положение указателя. Как только я открываю файл и получаю Stream, я вызываю метод mark(), чтобы последующий reset()переместил меня в начало. Тогда с помощью skip()я могу пойти куда захочу.

audioBIS.reset();
audioBIS.skip(newBytePosition);

Моя проблема в том, что вызов skip ()работает должным образом только в том случае, если я указываю достаточно большой буфер, чтобы вместить весь файл.

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

6
задан Giuseppe 27 July 2012 в 10:51
поделиться