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()呼び出しが希望どおりに機能することです。
これを行うためのより効率的な方法はありますか?