code: private void isReadyFalseCheck(){
          if(this.listener != null && !isFinished()){
              //checkAvilable returns true or false depending on if there is data available in the read buffer
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  Tr.debug(tc, "Checking for readLine or if there is data available : " + readLineCall + ", " + checkAvailable());
              if(!readLineCall && !checkAvailable()){
                  //If there is no data available then isReady will have returned false and this throw an IllegalStateException
                  if (TraceComponent.isAnyTracingEnabled() && tc.isErrorEnabled())
                      Tr.error(tc, "read.failed.isReady.false");
                  throw new IllegalStateException(Tr.formatMessage(tc, "read.failed.isReady.false"));
              }
          } else {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  Tr.debug(tc, "ReadListener is not set or the stream is finished : " + this.listener + ", " + isFinished());
          }
      }
docs: /*
  This method will check if there is a listener set. If there is a listener set, then call checkAvailable.
  checkAvailable checks the current read buffer to determine if there is data immediately available.
  If a call to isReady is done first then this should always be in the correct state and return the proper response