Nat*_*ann 4 java android inputstream outputstream blocked-threads
我正在尝试使用 PipedInputStream 和 PipedOutputStream 实现一个线程循环缓冲区,但是每次当我到达可运行的解码器中的 mHead.write 时它都会锁定。我认为使用单独的线程时不会出现死锁。
    private class DecoderTask implements Runnable{
    @Override
    public void run() {
        while(!mStop){
            try {
                    Log.d(TAG,"trying to write");
        mHead.write(decode( 0, 1000));
            mHead.flush();
            Log.d(TAG,"Decoded");
            } catch (DecoderException e) {
                Log.e(TAG,e.toString());
            } catch (IOException e) {
                Log.e(TAG,e.toString());
            }
        }
    }
}
private class WriteTask implements Runnable{
    @Override
    public void run() {
        while(!mStop){
            try {
                                 Log.d(TAG,"trying to read");
                 int read = mTail.read(mByteSlave, 0, mByteSlave.length);
                 mAudioTrack.flush();
                                 mAudioTrack.write(mByteSlave,0,read);
                                 Log.d(TAG,"read");                 
            } catch (IOException e) {
                Log.e(TAG,e.toString());
            }
        }
    }
}
//in some function
mTail = new PipedInputStream();
mHead = new PipedOutputStream(mTail);
mByteSlave = new byte[BUF];
mT1 = new Thread(new DecoderTask(), "Reader");
mT2 = new Thread(new WriteTask(), "Writer");
mT1.start();
mT2.start();
return;
编辑:这是我的服务的完整来源http://pastie.org/1179792
logcat 打印出:
努力阅读
努力写作
我遇到了同样的问题,并通过覆盖PipedInputStream(int)构造函数中的默认PIPE_SIZE来解决它。该方法PipedOutputStream.write(字节[],INT,INT)块,直到所有的字节被写入到输出流。这可能是默认 PIPE_SIZE 的问题。
毕竟,大小确实很重要;-)
| 归档时间: | 
 | 
| 查看次数: | 2838 次 | 
| 最近记录: |