Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JAVA中有效地播放.wav文件_Java - Fatal编程技术网

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

在JAVA中有效地播放.wav文件,java,Java,我正在编写一个程序,只需点击一个按钮就可以播放.wav文件。目前,我一直在这样做: 加载/打开文件 播放文件 关闭文件 这在一个单独的线程中发生 这工作得很好,我做起来没有问题,但我在某个地方读到,每次需要加载文件时都可能会减慢程序的速度,并可能导致各种各样的问题。他们说把这些文件放在缓存中更聪明,但我不知道怎么做(我想我也在StackOverflow中读到了,但我不太确定) 提前感谢。这取决于您如何播放文件,但假设您将文件加载为字节流,则只需将文件内容存储为字节数组并将其放入缓存即可 再次加载

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

  • 加载/打开文件
  • 播放文件
  • 关闭文件
  • 这在一个单独的线程中发生

    这工作得很好,我做起来没有问题,但我在某个地方读到,每次需要加载文件时都可能会减慢程序的速度,并可能导致各种各样的问题。他们说把这些文件放在缓存中更聪明,但我不知道怎么做(我想我也在StackOverflow中读到了,但我不太确定)


    提前感谢。

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

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

    类似于以下伪代码:

    byte[] cachedFile = cache.get(filename);
    if( cachedFile != null ) {
       cachedFile = loadFile( filename);
       cache.put( filename, cachedFile );
    }
    
    InputStream stream = new ByteArrayInputStream(cachedFile);
    play(stream);
    
    请注意,这只是一些基本方法,您需要将同步添加到缓存访问、异常处理、缓存逐出策略(如果缓存可能变得太大)等


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

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

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

    类似于以下伪代码:

    byte[] cachedFile = cache.get(filename);
    if( cachedFile != null ) {
       cachedFile = loadFile( filename);
       cache.put( filename, cachedFile );
    }
    
    InputStream stream = new ByteArrayInputStream(cachedFile);
    play(stream);
    
    请注意,这只是一些基本方法,您需要将同步添加到缓存访问、异常处理、缓存逐出策略(如果缓存可能变得太大)等

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