code: public boolean writeOutbound(Object... msgs) {
          ensureOpen();
          if (msgs.length == 0) {
              return isNotEmpty(outboundMessages);
          }
  
          RecyclableArrayList futures = RecyclableArrayList.newInstance(msgs.length);
          try {
              for (Object m: msgs) {
                  if (m == null) {
                      break;
                  }
                  futures.add(write(m));
              }
  
              flushOutbound0();
  
              int size = futures.size();
              for (int i = 0; i < size; i++) {
                  ChannelFuture future = (ChannelFuture) futures.get(i);
                  if (future.isDone()) {
                      recordException(future);
                  } else {
                      // The write may be delayed to run later by runPendingTasks()
                      future.addListener(recordExceptionListener);
                  }
              }
  
              checkException();
              return isNotEmpty(outboundMessages);
          } finally {
              futures.recycle();
          }
      }
docs: Write messages to the outbound of this {@link Channel}.
  
  @param msgs              the messages to be written
  @return bufferReadable   returns {@code true} if the write operation did add something to the outbound buffer