code: @Override
      @FFDCIgnore({ IOException.class })
      public void writeFile(FileChannel fc) throws IOException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "writeFile: " + fc);
          }
          if (cannotWriteFC()) {
              // not file channel capable
              convertFile(fc);
              return;
          }
          // make sure the headers are written separately from the file buffer
          flushHeaders();
          WsByteBuffer fb = HttpDispatcher.getBufferManager().allocateFileChannelBuffer(fc);
          try {
              // TODO should adjust write timeout based on file size. Large files
              // can only be written so fast so a 1Gb file should have larger
              // timeout than a 100K file
              this.isc.sendResponseBody(new WsByteBuffer[] { fb });
              this.bytesWritten += fc.size();
          } catch (MessageSentException mse) {
              FFDCFilter.processException(mse, getClass().getName(),
                                          "writeFile", new Object[] { this, this.isc });
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
                  Tr.event(tc, "Invalid state, message-sent-exception received; " + this.isc);
              }
              this.error = new IOException("Invalid state");
              throw this.error;
          } catch (IOException ioe) {
              // no FFDC required
              this.error = ioe;
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Received exception during write: " + ioe);
              }
              throw ioe;
          } finally {
              fb.release();
          }
      }
docs: /*
  (non-Javadoc)
  
  @see com.ibm.ws.http.channel.internal.outbound.HttpOutputStream#writeFile(java.nio.channels.FileChannel)