code: public int read(byte[] output, int offset, int length) throws IOException {
          
          int size = -1;
          validate();
          
          if (0 == length) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "read(byte[],int,int), Target length was 0");
              }
              return length;
          }
          
          if(doRead(length)){
              size = _buffer.limit() - _buffer.position();
              
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              {  
                Tr.debug(tc, "(byte[],int,int) Filling byte array, size --> " + size);         
              }
              _buffer.get(output, offset, size);
          }
          _buffer.release();
          _buffer = null;
          
          return size;
      }
docs: Read into the provided byte array with the length and offset provided
  
  @param output
  @param offset
  @param length
  @return int - the number of bytes read
  @throws IOException