2011-12-14 107 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); 

請注意,這只是一些基本的方法,你需要同步添加到緩存中訪問,異常處理,高速緩存逐出策略(如果緩存可能會太大)等

除此之外,你可能會考慮內存映射文件提供了一個折衷:你不必在播放它之前讀取整個文件,而是直接在播放時讀取流。因此你只能閱讀玩家需要的部分。由於硬盤吞吐量較低,這可能仍然比內存中的數據要慢,但這可能甚至不明顯,因爲您在給定時間只需要文件中的一定數量的數據。採用這種方法,您不需要緩存,並且可以降低內存需求。