code: @Override
      public int read() throws IOException {
          try {
              beforeRead(1);
              int b = in.read();
              afterRead(b != -1 ? 1 : -1);
              return b;
          } catch (IOException e) {
              handleIOException(e);
              return -1;
          }
      }
docs: Invokes the delegate's <code>read()</code> method.
  
  @return the byte read or -1 if the end of stream
  @throws java.io.IOException if an I/O error occurs