public void interestRead(boolean status) {
   source.interestRead(status);
 }
 public boolean isOpen() {
   return source.isOpen();
 }
 public void close() throws IOException {
   source.close();
 }
 public int read(ByteBuffer b) throws IOException {
   return source.read(b);
 }
 public void handleRead() throws IOException {
   while (buffer.hasRemaining() && source.read(buffer) != 0) ;
 }
 // ReadObserver methods.
 public void handleRead() throws IOException {
   source.read(readData);
   assertEquals(0, source.read(readData)); // must have finish on first read.
 }