Java 以不同速率从输入流多次读取

Java 以不同速率从输入流多次读取,java,caching,stream,inputstream,outputstream,Java,Caching,Stream,Inputstream,Outputstream,我要加载一个在线内容(比如音频文件)。如果我只是打开到远程文件的连接(例如通过使用new URL().openStream())并将远程InputStream传递给音频播放器,它会从网络中逐渐读取。如果音频播放器库未要求InputStream获取更多数据,则它不会从网络中读取任何内容,然后当库要求获取更多数据时,它会再次读取 我的问题是,我想在第一个在线音频文件的加载过程完成后立即开始缓存下一个在线音频文件。使用正常的输入流,读取在音频播放完成时完成,这并不好,因为如果网络带宽允许,我希望读取速

我要加载一个在线内容(比如音频文件)。如果我只是打开到远程文件的连接(例如通过使用
new URL().openStream()
)并将远程
InputStream
传递给音频播放器,它会从网络中逐渐读取。如果音频播放器库未要求
InputStream
获取更多数据,则它不会从网络中读取任何内容,然后当库要求获取更多数据时,它会再次读取

我的问题是,我想在第一个在线音频文件的加载过程完成后立即开始缓存下一个在线音频文件。使用正常的
输入流
,读取在音频播放完成时完成,这并不好,因为如果网络带宽允许,我希望读取速度更快,以便缓存下一个音频文件。我的音频文件小于3mb,因此可以安全地缓存到内存中。我只预取一个文件,所以没有内存泄漏的问题


是否存在允许并发读取的任何类型的缓存
InputStream
?然后,我可以运行一个线程并以比音频播放器消耗数据更快的速度缓存音频。

我建议您创建第二个线程来执行下载。在此线程中尽快下载文件,并将数据推送到主播放线程。

这是我的想法,但我应该编写自己的ConcurrentInputStream impl。我问是否已经有了一个实现。commons-io有一个DemuxInputStream,但我不确定它是否有用。