我有一个应用程序使用 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 文件保存到磁盘?
最佳答案
为了避免必须通过字节两次,您需要将来自连接的输入流包装在一个过滤器中,该过滤器将读取的任何数据写入输出流,即一种“三通管输入流”。这样的类自己编写并不难,但您可以使用 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
编辑:概念验证:
import java.io.*;
public class TeeInputStream extends InputStream {
private InputStream in;
private OutputStream out;
public TeeInputStream(InputStream in, OutputStream branch) {
this.in=in;
this.out=branch;
}
public int read() throws IOException {
int read = in.read();
if (read != -1) out.write(read);
return read;
}
public void close() throws IOException {
in.close();
out.close();
}
}
使用方法:
...
BufferedInputStream bis = new BufferedInputStream(is);
TeeInputStream tis = new TeeInputStream(bis,new FileOutputStream("test.mp3"));
BasicPlayer player = new BasicPlayer();
player.open(tis);
player.play();
关于java - 在Java中播放时将mp3文件写入磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9289854/