2011-12-14 11 views
0

ボタンをクリックして.wavファイルを再生できるプログラムを作成しています。現在、私は次のようにしています。効果的にJAVAの.wavファイルを再生する

  1. ファイルをロード/開く。
  2. ファイルを再生します。
  3. ファイルを閉じます。

これは別のスレッドで発生します。

これは非常にうまくいっていますが、問題はありませんが、必要なときにファイルを読み込むと、プログラムが遅くなり、さまざまな問題が発生する可能性があります。彼らはこれらのファイルをキャッシュに入れるほうが賢明だと言っていましたが、私はそれをどうやって行うのかは分かりません(StackOverflowでもそれを読んでいると思いますが、あまりよく分かりません)。

ありがとうございます。

答えて

3

ファイルを再生する方法によって異なりますが、ファイルをバイトストリームとしてロードすると、ファイルの内容をバイト配列として格納してキャッシュに格納するだけで済みます。

ファイルを再度ロードするときに、キャッシュからバイト配列を取得し、そこから入力ストリームを作成します。

この擬似コードのようなもの:

byte[] cachedFile = cache.get(filename); 
if(cachedFile != null) { 
    cachedFile = loadFile(filename); 
    cache.put(filename, cachedFile); 
} 

InputStream stream = new ByteArrayInputStream(cachedFile); 
play(stream); 

注キャッシュを得る可能性がある場合、これは単にいくつかの基本的なアプローチであることを、あなたは(キャッシュアクセスに同期を追加する必要があり、例外処理、キャッシュ立ち退き戦略だろう大きすぎるなど)

これ以外にも、ファイルをメモリマッピングすると、トレードオフが発生します。再生する前にファイル全体を読み取る必要はなく、再生中にストリームを直接読み取る必要はありません。したがって、あなたはプレーヤーが必要とする部分だけを読むでしょう。これは、ハードディスクのスループットが低下しているため、メモリ内のデータよりもまだ遅いかもしれませんが、特定の時間に特定の量のデータしか必要としないので目立つことさえありません。この方法では、キャッシュが不要になり、メモリの必要量を減らすことができます。

関連する問題