Я воспроизводю аудиофайл, используя 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 ()работает должным образом только в том случае, если я указываю достаточно большой буфер, чтобы вместить весь файл.
Есть ли более эффективный способ сделать это?