class Builder extends Msg
    {
        private final ByteArrayOutputStream out = new ByteArrayOutputStream();

        public Builder()
        {
            super();
        }

        @Override
        public int size()
        {
            return out.size();
        }

        @Override
        protected Msg put(int index, byte b)
        {
            out.write(b);
            return this;
        }

        @Override
        public Msg put(byte[] src, int off, int len)
        {<FILL_FUNCTION_BODY>}

        @Override
        public Msg put(ByteBuffer src, int off, int len)
        {
            if (src == null) {
                return this;
            }
            for (int idx = off; idx < off + len; ++idx) {
                out.write(src.get(idx));
            }
            setWriteIndex(getWriteIndex() + len);
            return this;
        }

        @Override
        public Msg putShortString(String data)
        {
            if (data == null) {
                return this;
            }
            int length = data.length();
            Utils.checkArgument(length < 256, "String must be strictly smaller than 256 characters");
            out.write((byte) length);
            out.write(data.getBytes(ZMQ.CHARSET), 0, length);
            setWriteIndex(getWriteIndex() + length + 1);
            return this;
        }

        @Override
        public void setFlags(int flags)
        {
            super.setFlags(flags);
        }

        public Msg build()
        {
            return new Msg(this, out);
        }
    }

            if (src == null) {
                return this;
            }
            out.write(src, off, len);
            setWriteIndex(getWriteIndex() + len);
            return this;
        
<no_super_class>