在Java中播放时将mp3文件写入磁盘
我有一个使用 JLayer/BasicPlayer 库通过 HTTP 播放远程 MP3 文件的应用程序。我想将播放的 mp3 文件保存到磁盘而不重新下载它们。
这是使用基于 JLayer 的 BasicPlayer 来播放 MP3 文件的代码。
String mp3Url = "http://ia600402.us.archive.org/6/items/Stockfinster.-DeadLinesutemos025/01_Push_Push.mp3";
URL url = new URL(mp3Url);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
BasicPlayer player = new BasicPlayer();
player.open(bis);
player.play();
如何将 mp3 文件保存到磁盘?
I have an application playing remote MP3 files over HTTP using the JLayer/BasicPlayer libraries. I want to save the played mp3 files to disk without re-downloading them.
This is the code using the JLayer based BasicPlayer for Playing the MP3 file.
String mp3Url = "http://ia600402.us.archive.org/6/items/Stockfinster.-DeadLinesutemos025/01_Push_Push.mp3";
URL url = new URL(mp3Url);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
BasicPlayer player = new BasicPlayer();
player.open(bis);
player.play();
How would I save the mp3 file to disk?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以首先使用 FileInputStream 将流写入磁盘。然后从文件重新加载流。
You can first write the stream to disk with
FileInputStream
. Then reload the stream from file.包装你自己的InputStream
并使用
Wrap you own InputStream
and use
为了避免必须两次检查字节,您需要将来自连接的输入流包装在过滤器中,该过滤器将读取的任何数据写入输出流,即一种“tee 管道输入流”。自己编写这样的类并不困难,但您可以使用 Apache Commons IO 库中的
TeeInputStream
来节省工作。Apache Commons IO:http://commons.apache.org/io/
TeeInputStream javadoc:http://commons.apache。 org/io/apidocs/org/apache/commons/io/input/TeeInputStream.html
编辑: 概念验证:
如何使用它:
To avoid having to go through the bytes twice, you need to wrap the input stream from the connection in a filter that writes any data that is read to an output stream, i.e. a kind of a "tee pipe input stream." Such a class is not that difficult to write yourself, but you can save the work by using
TeeInputStream
from the Apache Commons IO library.Apache Commons IO: http://commons.apache.org/io/
TeeInputStream javadoc: http://commons.apache.org/io/apidocs/org/apache/commons/io/input/TeeInputStream.html
Edit: Proof-of-concept:
How to use it: