docs: public int readLine(byte[] b, int off, int len) throws IOException 
      {
          if (TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
              logger.logp(Level.FINE, CLASS_NAME,"readLine", "readLine");
          } 
          
          if ( total >= limit )
          {
              if (TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
                  logger.logp(Level.FINE, CLASS_NAME,"readLine", "readLine Over the limit: -1");
              } 
              return -1;
          }
          int avail; //bytes available in buffer
          int readlen; //amount to be read by copyline
          int remain = 0; //amount remaining to be read
          int newlen; //amount read by copyline
          int totalread; //total amount read so far
  
          remain = len;
          avail = count - pos;
          if ( avail <= 0 )
          {
              fill();
              avail = count - pos;
              if ( avail <= 0 )
              {
                  if (TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
                      logger.logp(Level.FINE, CLASS_NAME,"readLine", "readLine avail less than 0: -1");
                  } 
                  return -1;
              }
          }
          if ( avail < len )
          {
              readlen = avail;
          }
          else
          {
              readlen = len;
          }
          newlen = copyLine(buf, pos, b, off, readlen);
          pos += newlen;
          total += newlen;
          remain -= newlen;
          totalread = newlen;
          if ( totalread == 0 )
          {
              //should never happen
              if (TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
                  logger.logp(Level.FINE, CLASS_NAME,"readLine", "readLine totalRead is 0: -1");
              } 
              return -1;
          }
          while ( remain > 0 && b[off+totalread-1] != '\n' )
          {
              //loop through until the conditions of the method are satisfied
              fill();
              avail = count - pos;
              if ( avail <= 0 )
              {
                  // The stream is finished, return what we have.
                  if (TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
                      logger.logp(Level.FINE, CLASS_NAME,"readLine", "readLine returning --> "+totalread);
                  } 
                  return totalread;
              }
              if ( avail < remain )
              {
                  readlen = avail;
              }
              else
              {
                  readlen = remain;
              }
              newlen = copyLine(buf, pos, b, off+totalread, readlen);
              pos += newlen;
              total += newlen;
              remain -= newlen;
              totalread += newlen;
          }
  
          return totalread;
      }