code: private void validate() throws IOException {
          if (null != _error) {
              throw _error;
          }
          
          if(!_isReadLine && !_isReady){
              //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"));
          }
      }
docs: This checks if we have already had an exception thrown. If so it just rethrows that exception
  This check is done before any reads are done
  
  @throws IOException