[英]Effectively playing .wav files in JAVA
我正在编写一个程序,单击一下按钮即可播放.wav
文件。 目前,我一直在这样做:
这发生在单独的线程中。
这样做很好,我也没问题,但是我读过某个地方,每次需要时加载文件都可能会使程序变慢,并可能引起各种麻烦。 他们说把这些文件放在缓存中比较聪明,但是我不确定该怎么做(我想我也在StackOverflow中读过,但是我不太确定)。
提前致谢。
这取决于您如何播放文件,但是假设您将文件作为字节流加载,则只需将文件内容存储为字节数组,然后将其放入缓存即可。
再次加载文件时,您从缓存中检索字节数组,并从中创建输入流。
像这样的伪代码:
byte[] cachedFile = cache.get(filename);
if( cachedFile != null ) {
cachedFile = loadFile( filename);
cache.put( filename, cachedFile );
}
InputStream stream = new ByteArrayInputStream(cachedFile);
play(stream);
请注意,这只是一些基本方法,您需要将同步添加到缓存访问,异常处理,缓存逐出策略(如果缓存可能太大)等。
除此之外,您还可以研究文件的内存映射,这提供了一个折衷方案:您不必在播放文件之前先读取整个文件,而在播放时直接读取流。 因此,您只需阅读播放器所需的零件。 由于较低的硬盘吞吐量,这可能仍比内存中的数据慢,但由于在给定时间只需要文件中的一定数量的数据,这甚至可能并不明显。 使用这种方法,您将不需要缓存,并且可以减少内存需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.