code: @Override
      public int read(byte[] output, int offset, int length) throws IOException {
          synchronized(this){
              int value = 0;
              if(closed) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isErrorEnabled())
                      Tr.error(tc, "stream.is.closed.no.read.write");
                  throw new IOException(Tr.formatMessage(tc, "stream.is.closed.no.read.write"));
              }
              if(output == null){
                  if (TraceComponent.isAnyTracingEnabled() && tc.isErrorEnabled())
                      Tr.error(tc, "read.write.bytearray.null");
                  throw new NullPointerException(Tr.formatMessage(tc, "read.write.bytearray.null"));
              }
              if((offset < 0) || (length < 0) || (length > (output.length - offset))){
                  if (TraceComponent.isAnyTracingEnabled() && tc.isErrorEnabled())
                      Tr.error(tc, "read.write.offset.length.bytearraylength", new Object[] {offset, length, output.length});
                  throw new IndexOutOfBoundsException(Tr.formatMessage(tc, "read.write.offset.length.bytearraylength", new Object[] {offset, length, output.length}));
              }
  
              if (this._inBuffer != null) {
                  value = _inBuffer.read(output, offset, length);
              }
              else {
                  value = this.in.read(output, offset, length);
              }
  
              return value;
          }
      }
docs: /* (non-Javadoc)
  @see com.ibm.ws.webcontainer.srt.SRTInputStream#read(byte[], int, int)