我想从互联网流式传输音频文件并播放它。我正在使用以下代码:
int readBytes = 0;
byte[] audioBuffer = new byte[this.EXTERNAL_BUFFER_SIZE];
readBytes = in.read(audioBuffer, 0, audioBuffer.length);
while (readBytes != -1) {
readBytes = in.read(audioBuffer, 0, audioBuffer.length);
if (readBytes >= 0) {
dataLine.write(audioBuffer, 0, readBytes);
}
}
这样做的问题是,当流正在读取时,它不是在写入。因此,音乐不会每隔几秒钟播放一小段时间。所以我想知道是否有一种方法可以让流同时从输入流读取并写入数据线,以便写入永远不会暂停读取。
是的,有。当您尝试一次做任何 2 件或更多事情时,那么您正在寻找 多线程 .
这不是你可以在 5 分钟内学会的东西,所以你应该在这里阅读它
例如:
public class Printer implements Runnable{
String name;
public Printer(String name){
this.name=name;
}
public void run(){
while(true){
System.out.println("i am thread"+name);
//in your case read or write bytes to dataline here;
}
}
public static void main(String[] args){
Printer print1= new Printer("a");
Printer print2 = new Printer("b");
new Thread(print1).start();
new Thread(print2).start();
}
}
这将保持打印"我是线程A"我是线程B"没有定义的顺序,因为它没有同步,所以它可以给出Aabbbbaabababa而不是abab,但这个想法是它们同时运行。
这只是一个关于如何使用线程的粗略示例,它缺少同步和安全性,以及在处理线程之前应该阅读的内容。
我不确定这是否可能,但dataLine.write(audioBuffer, 0, in.read());
做你想做的事吗?