在JAVA中有效地播放.wav文件

时间:2011-12-14 15:05:50

标签: java

我正在编写一个程序,只需点击一下按钮即可播放.wav个文件。目前,我一直在这样做:

  1. 加载/打开文件。
  2. 播放文件。
  3. 关闭文件。
  4. 这发生在一个单独的线程中。

    这非常有效,我没有遇到任何问题,但我已经读过某些地方,每次需要时加载文件都可能会减慢程序速度,并可能导致各种麻烦。他们说将这些文件放在缓存中会更聪明,但我不知道该怎么做(我想我也在StackOverflow中读过它,但我不太确定)。

    提前致谢。

1 个答案:

答案 0 :(得分:3)

这取决于您如何播放文件,但假设您将文件作为字节流加载,您只需将文件内容存储为字节数组并将其放入缓存中。

再次加载文件时,从缓存中检索字节数组并从中创建输入流。

像这样的伪代码:

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

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

请注意,这只是一些基本方法,您需要将同步添加到缓存访问,异常处理,缓存逐出策略(如果缓存可能变得太大)等。

除此之外,您可能会查看内存映射文件,这些文件提供了权衡:您不必在播放之前读取整个文件,而是在播放时直接读取流。因此,您只能阅读玩家需要的部分。由于较低的硬盘吞吐量,这可能仍然比内存数据慢,但由于您在给定时间只需要来自文件的一定数量的数据,因此可能甚至不明显。使用这种方法,您不需要缓存,并且可以减少内存需求。