I'm trying to pipe some ByteBuffer in a thread (IO1) to another (IO2).
http://tutorials.jenkov.com/java-nio/pipe.html
private int bufferSize;
private boolean isRecording;
private Thread IO1;
private Thread IO2;
private ByteBuffer byteBuffer1;
private ByteBuffer byteBuffer2;
private Pipe pipe;
private Pipe.SinkChannel skChannel;
private Pipe.SourceChannel sourceChannel;
            byteBuffer1 = ByteBuffer.allocateDirect(bufferSize);
            byteBuffer2 = ByteBuffer.allocateDirect(bufferSize);
            //An instance of Pipe is created
            try
            {
                pipe = Pipe.open();
                skChannel = pipe.sink();
                sourceChannel = pipe.source();
                IO1.start();
                IO2.start();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
--
IO1 = new Thread(new Runnable()
{
    public void run()
    {
        isRecording = true;
        recorder.startRecording();
        try
        {
            int read;
            while (isRecording)
            {
               // byteBuffer1.clear();
                read = recorder.read(byteBuffer1, bufferSize);
                if (AudioRecord.ERROR_INVALID_OPERATION != read)
                {
                       skChannel.write(byteBuffer1);
                       Log.v("========IO1 ", String.valueOf(read));
                       //This triggered almost 20 times/second
                }
            }
            recorder.stop();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
});
skChannel.write(byteBuffer1); and
                       Log.v("========IO1 ", String.valueOf(read));
                       is triggered almost 20 times/second, and this is the expected behavior, so far so good.
IO2 = new Thread(new Runnable()
{
    public void run()
    { 
        try
        {
            int read;
            while (  (read =sourceChannel.read(byteBuffer2)) >0)
            {
                Log.v("========IO2 ", String.valueOf(read));
                //this triggered only once
                // To do Codec etc.
                //............
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        } 
        Log.v("========IO2 ", "END!!!!!"); //never triggered(this is fine)
    }
});
However, Log.v("========IO2 ", String.valueOf(read)); is triggered only once, and I don't know why. 
Can someone tell me how can I obtain the update of Thread IO1 in IO2?
Thanks.
