@Override
    public int read(byte[] bts, int off, int len) throws IOException {
        try {
            beforeRead(len);
            int n = in.read(bts, off, len);
            afterRead(n);
            return n;
        } catch (IOException e) {
            handleIOException(e);
            return -1;
        }
    }
@ Override public int read ( byte [ ] bts , int off , int len ) throws IOException { try { beforeRead ( len ) ; int n = in . read ( bts , off , len ) ; afterRead ( n ) ; return n ; } catch ( IOException e ) { handleIOException ( e ) ; return - 1 ; } }
Invokes the delegate's <code>read(byte[], int, int)</code> method.

@param bts the buffer to read the bytes into
@param off The start offset
@param len The number of bytes to read
@return the number of bytes read or -1 if the end of stream
@throws java.io.IOException if an I/O error occurs