【发布时间】:2012-07-26 01:05:47
【问题描述】:
我正在使用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() 调用才能正常工作。
有没有更有效的方法来做到这一点?
【问题讨论】:
标签: java audio inputstream