java流并行读/写

时间:2014-11-16 15:32:42

标签: java io stream copy

我想从互联网流式播放音频文件并进行播放。 我正在使用此代码:

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);
        }
    }

这个问题是当Stream正在读取时,它不会写入。因此,音乐不会每隔几秒钟播放一小段时间。 所以我想知道流是否有一种方法可以同时从输入流读取并写入数据线,因此写入永远不会暂停读取。

2 个答案:

答案 0 :(得分:0)

是的。当你试图同时做任何2件事或更多时,那么你正在寻找多线程。

这不是你可以在5分钟内学到的东西,所以你应该阅读它here

例如:

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();
 }
}

这将继续打印“我是线程”“我是线程b”没有定义的顺序,因为它没有同步,所以它可以给aabbbbaababaaba而不是ababababab,但想法是它们都在同时运行。

这只是一个粗略的例子,说明如何使用线程,缺少同步性和安全性以及在处理线程之前应该阅读的内容。

答案 1 :(得分:-1)

我不确定这是否可行,但dataLine.write(audioBuffer, 0, in.read());做了你想做的事吗?