我正在使用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() 调用才能按需要工作。
有没有更有效的方法来做到这一点?