@Override
    public byte[] buildBytes(final boolean outer) {

        final Set<Entry<String, ValueValueType>> superEntrySet = super.entrySet();

        final int capacity = outer ? superEntrySet.size() + 1
                : superEntrySet.size();

        final Deque<NameValue> nameValues = new ArrayDeque<>(capacity);

        if (outer) {
            final NameValue typeNameValue = new NameValue();
            typeNameValue.setName(BMType.OBJECT.getType());
            nameValues.add(typeNameValue);
        }

        for (final Entry<String, ValueValueType> entry : superEntrySet) {
            final String key = entry.getKey();
            final ValueValueType valueValueType = entry.getValue();
            final byte valueType = valueValueType.getValueTypeByte();

            final NameValue nameValue = new NameValue();
            nameValue.setName(key.getBytes(StandardCharsets.UTF_8));

            nameValues.add(nameValue);

            if (valueType == BMValueType.STRING.getType()) {

                final String value = (String) valueValueType.getValue();

                nameValue.setValues(new byte[] { valueType },
                        value.getBytes(StandardCharsets.UTF_8));

            } else if (valueType == BMValueType.NUMBER.getType()) {

                final Number value = (Number) valueValueType.getValue();
                final byte[] valueBytes = WffBinaryMessageUtil
                        .getOptimizedBytesFromDouble(value.doubleValue());
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.UNDEFINED.getType()) {

                final byte[] valueBytes = {};
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.NULL.getType()) {
                final byte[] valueBytes = {};
                nameValue.setValues(new byte[] { valueType }, valueBytes);
            } else if (valueType == BMValueType.BOOLEAN.getType()) {

                final Boolean value = (Boolean) valueValueType.getValue();
                final byte[] valueBytes = {
                        (byte) (value.booleanValue() ? 1 : 0) };
                nameValue.setValues(new byte[] { valueType }, valueBytes);
            } else if (valueType == BMValueType.BM_OBJECT.getType()) {

                final WffBMObject value = (WffBMObject) valueValueType
                        .getValue();
                final byte[] valueBytes = value.buildBytes(false);
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.BM_ARRAY.getType()) {

                final WffBMArray value = (WffBMArray) valueValueType.getValue();
                final byte[] valueBytes = value.buildBytes(false);
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.BM_BYTE_ARRAY.getType()) {

                final WffBMByteArray value = (WffBMByteArray) valueValueType
                        .getValue();
                final byte[] valueBytes = value.build(false);
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.REG_EXP.getType()) {
                final String value = (String) valueValueType.getValue();
                nameValue.setValues(new byte[] { valueType },
                        value.getBytes(StandardCharsets.UTF_8));
            } else if (valueType == BMValueType.FUNCTION.getType()) {

                final String value = (String) valueValueType.getValue();

                nameValue.setValues(new byte[] { valueType },
                        value.getBytes(StandardCharsets.UTF_8));

            } else if (valueType == BMValueType.INTERNAL_BYTE.getType()) {
                throw new WffRuntimeException(
                        "BMValueType.BYTE is only for internal use, use WffBMByteArray for row bytes.");
            }

        }

        return WffBinaryMessageUtil.VERSION_1
                .getWffBinaryMessageBytes(nameValues);
    }
@Override
    public byte[] buildBytes(final boolean outer) {

        final Set<Entry<String, ValueValueType>> superEntrySet = super.entrySet();

        final int capacity = outer ? superEntrySet.size() + 1
                : superEntrySet.size();

        final Deque<NameValue> nameValues = new ArrayDeque<>(capacity);

        if (outer) {
            final NameValue typeNameValue = new NameValue();
            typeNameValue.setName(BMType.OBJECT.getType());
            nameValues.add(typeNameValue);
        }

        for (final Entry<String, ValueValueType> entry : superEntrySet) {
            final String key = entry.getKey();
            final ValueValueType valueValueType = entry.getValue();
            final byte valueType = valueValueType.getValueTypeByte();

            final NameValue nameValue = new NameValue();
            nameValue.setName(key.getBytes(StandardCharsets.UTF_8));

            nameValues.add(nameValue);

            if (valueType == BMValueType.STRING.getType()) {

                final String value = (String) valueValueType.getValue();

                nameValue.setValues(new byte[] { valueType },
                        value.getBytes(StandardCharsets.UTF_8));

            } else if (valueType == BMValueType.NUMBER.getType()) {

                final Number value = (Number) valueValueType.getValue();
                final byte[] valueBytes = WffBinaryMessageUtil
                        .getOptimizedBytesFromDouble(value.doubleValue());
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.UNDEFINED.getType()) {

                final byte[] valueBytes = {};
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.NULL.getType()) {
                final byte[] valueBytes = {};
                nameValue.setValues(new byte[] { valueType }, valueBytes);
            } else if (valueType == BMValueType.BOOLEAN.getType()) {

                final Boolean value = (Boolean) valueValueType.getValue();
                final byte[] valueBytes = {
                        (byte) (value.booleanValue() ? 1 : 0) };
                nameValue.setValues(new byte[] { valueType }, valueBytes);
            } else if (valueType == BMValueType.BM_OBJECT.getType()) {

                final WffBMObject value = (WffBMObject) valueValueType
                        .getValue();
                final byte[] valueBytes = value.buildBytes(false);
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.BM_ARRAY.getType()) {

                final WffBMArray value = (WffBMArray) valueValueType.getValue();
                final byte[] valueBytes = value.buildBytes(false);
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.BM_BYTE_ARRAY.getType()) {

                final WffBMByteArray value = (WffBMByteArray) valueValueType
                        .getValue();
                final byte[] valueBytes = value.build(false);
                nameValue.setValues(new byte[] { valueType }, valueBytes);

            } else if (valueType == BMValueType.REG_EXP.getType()) {
                final String value = (String) valueValueType.getValue();
                nameValue.setValues(new byte[] { valueType },
                        value.getBytes(StandardCharsets.UTF_8));
            } else if (valueType == BMValueType.FUNCTION.getType()) {

                final String value = (String) valueValueType.getValue();

                nameValue.setValues(new byte[] { valueType },
                        value.getBytes(StandardCharsets.UTF_8));

            } else if (valueType == BMValueType.INTERNAL_BYTE.getType()) {
                throw new WffRuntimeException(
                        "BMValueType.BYTE is only for internal use, use WffBMByteArray for row bytes.");
            }

        }

        return WffBinaryMessageUtil.VERSION_1
                .getWffBinaryMessageBytes(nameValues);
    }
@ Override public byte [ ] buildBytes ( final boolean outer ) { final Set < Entry < String , ValueValueType > > superEntrySet = super . entrySet ( ) ; final int capacity = outer ? superEntrySet . size ( ) + 1 : superEntrySet . size ( ) ; final Deque < NameValue > nameValues = new ArrayDeque <> ( capacity ) ; if ( outer ) { final NameValue typeNameValue = new NameValue ( ) ; typeNameValue . setName ( BMType . OBJECT . getType ( ) ) ; nameValues . add ( typeNameValue ) ; } for ( final Entry < String , ValueValueType > entry : superEntrySet ) { final String key = entry . getKey ( ) ; final ValueValueType valueValueType = entry . getValue ( ) ; final byte valueType = valueValueType . getValueTypeByte ( ) ; final NameValue nameValue = new NameValue ( ) ; nameValue . setName ( key . getBytes ( StandardCharsets . UTF_8 ) ) ; nameValues . add ( nameValue ) ; if ( valueType == BMValueType . STRING . getType ( ) ) { final String value = ( String ) valueValueType . getValue ( ) ; nameValue . setValues ( new byte [ ] { valueType } , value . getBytes ( StandardCharsets . UTF_8 ) ) ; } else if ( valueType == BMValueType . NUMBER . getType ( ) ) { final Number value = ( Number ) valueValueType . getValue ( ) ; final byte [ ] valueBytes = WffBinaryMessageUtil . getOptimizedBytesFromDouble ( value . doubleValue ( ) ) ; nameValue . setValues ( new byte [ ] { valueType } , valueBytes ) ; } else if ( valueType == BMValueType . UNDEFINED . getType ( ) ) { final byte [ ] valueBytes = { } ; nameValue . setValues ( new byte [ ] { valueType } , valueBytes ) ; } else if ( valueType == BMValueType . NULL . getType ( ) ) { final byte [ ] valueBytes = { } ; nameValue . setValues ( new byte [ ] { valueType } , valueBytes ) ; } else if ( valueType == BMValueType . BOOLEAN . getType ( ) ) { final Boolean value = ( Boolean ) valueValueType . getValue ( ) ; final byte [ ] valueBytes = { ( byte ) ( value . booleanValue ( ) ? 1 : 0 ) } ; nameValue . setValues ( new byte [ ] { valueType } , valueBytes ) ; } else if ( valueType == BMValueType . BM_OBJECT . getType ( ) ) { final WffBMObject value = ( WffBMObject ) valueValueType . getValue ( ) ; final byte [ ] valueBytes = value . buildBytes ( false ) ; nameValue . setValues ( new byte [ ] { valueType } , valueBytes ) ; } else if ( valueType == BMValueType . BM_ARRAY . getType ( ) ) { final WffBMArray value = ( WffBMArray ) valueValueType . getValue ( ) ; final byte [ ] valueBytes = value . buildBytes ( false ) ; nameValue . setValues ( new byte [ ] { valueType } , valueBytes ) ; } else if ( valueType == BMValueType . BM_BYTE_ARRAY . getType ( ) ) { final WffBMByteArray value = ( WffBMByteArray ) valueValueType . getValue ( ) ; final byte [ ] valueBytes = value . build ( false ) ; nameValue . setValues ( new byte [ ] { valueType } , valueBytes ) ; } else if ( valueType == BMValueType . REG_EXP . getType ( ) ) { final String value = ( String ) valueValueType . getValue ( ) ; nameValue . setValues ( new byte [ ] { valueType } , value . getBytes ( StandardCharsets . UTF_8 ) ) ; } else if ( valueType == BMValueType . FUNCTION . getType ( ) ) { final String value = ( String ) valueValueType . getValue ( ) ; nameValue . setValues ( new byte [ ] { valueType } , value . getBytes ( StandardCharsets . UTF_8 ) ) ; } else if ( valueType == BMValueType . INTERNAL_BYTE . getType ( ) ) { throw new WffRuntimeException ( "BMValueType.BYTE is only for internal use, use WffBMByteArray for row bytes." ) ; } } return WffBinaryMessageUtil . VERSION_1 . getWffBinaryMessageBytes ( nameValues ) ; }
@param outer
@return bytes for this WffBMObject

@since 3.0.2
@author WFF
@param outer @return bytes for this WffBMObject