code: private void doSendFile(final AsyncFile file, final OutputGroup group, final int position, final Handler<AsyncResult<Void>> doneHandler) {
      if (!group.sendQueueFull()) {
        file.read(new Buffer(BUFFER_SIZE), 0, position, BUFFER_SIZE, new Handler<AsyncResult<Buffer>>() {
          @Override
          public void handle(AsyncResult<Buffer> result) {
            if (result.failed()) {
              new DefaultFutureResult<Void>(result.cause()).setHandler(doneHandler);
            } else {
              Buffer buffer = result.result();
              if (buffer.length() > 0) {
                group.send(buffer);
                doSendFile(file, group, position+buffer.length(), doneHandler);
              } else {
                group.end();
                new DefaultFutureResult<Void>((Void) null).setHandler(doneHandler);
              }
            }
          }
        });
      } else {
        group.drainHandler(new Handler<Void>() {
          @Override
          public void handle(Void event) {
            doSendFile(file, group, position, doneHandler);
          }
        });
      }
    }
docs: Sends the file to the given output group.