我有一个音频播放器,它使用PipedOutputStream缓冲数据的输入,并使用PipedInput进行实际播放。有时播放器会暂停,但仍有数据需要缓冲。如果缓冲区现在已满,则写入线程将无限期阻塞。

有没有一种快速的替代方案,它支持写入超时或其他解决方案?

最佳答案

有spf4j,其中包含PipedInput / OuputStream的替代实现。我遇到了同样的问题并已解决。

该问题的根本原因是,pipedinputstream每次都会在read方法中检查writer(从pipiedoutputstream调用write的线程)的活动状态。
因此,编写器提前完成,然后读取将引发异常,并在剩余未读取数据的情况下完成读取循环

10-07 22:51