code: @Override
      public void serialize(String name, byte[] message, OutputStream out) throws IOException {
          byte[] header = new byte[4 + COMMAND_LEN + 4 + 4 /* checksum */];
          uint32ToByteArrayBE(params.getPacketMagic(), header, 0);
  
          // The header array is initialized to zero by Java so we don't have to worry about
          // NULL terminating the string here.
          for (int i = 0; i < name.length() && i < COMMAND_LEN; i++) {
              header[4 + i] = (byte) (name.codePointAt(i) & 0xFF);
          }
  
          Utils.uint32ToByteArrayLE(message.length, header, 4 + COMMAND_LEN);
  
          byte[] hash = Sha256Hash.hashTwice(message);
          System.arraycopy(hash, 0, header, 4 + COMMAND_LEN + 4, 4);
          out.write(header);
          out.write(message);
  
          if (log.isDebugEnabled())
              log.debug("Sending {} message: {}", name, HEX.encode(header) + HEX.encode(message));
      }
docs: Writes message to to the output stream.