我正在编写一个程序,只需单击一个按钮即可播放 .wav
文件。目前,我一直在这样做:
- 加载/打开文件。
- 播放文件。
- 关闭文件。
这发生在单独的线程中。
这工作得很好,我这样做没有任何问题,但我在某处读到,每次需要文件时加载文件可能会减慢程序速度,并可能导致各种麻烦。他们说将这些文件放入缓存中更明智,但我不知道如何做到这一点(我想我也在 StackOverflow 中读到过,但我不太确定)。
提前致谢。
最佳答案
这取决于您如何播放文件,但假设您将文件作为字节流加载,您只需将文件的内容存储为字节数组并将其放入缓存中。
再次加载文件时,您从缓存中检索字节数组并从中创建输入流。
像这样的伪代码:
byte[] cachedFile = cache.get(filename);
if( cachedFile != null ) {
cachedFile = loadFile( filename);
cache.put( filename, cachedFile );
}
InputStream stream = new ByteArrayInputStream(cachedFile);
play(stream);
请注意,这只是一些基本方法,您需要向缓存访问添加同步、异常处理、缓存驱逐策略(如果缓存可能太大)等。
此外,您可能会研究内存映射文件,这提供了一个权衡:您不必在播放之前读取整个文件,而是在播放时直接读取流。因此,您只需阅读玩家需要的部分。由于硬盘吞吐量较低,这可能仍然比内存中的数据慢,但这甚至可能不明显,因为您在给定时间只需要文件中的一定量的数据。通过这种方法,您不需要缓存,并且可以减少内存需求。
关于java - 在JAVA中有效播放.wav文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8506719/