public TibMsgIterator(byte[] data) throws TibException
        {
            _msg = new TibMsg();
            _formatter = new DecimalFormat();
            _formatter.setMaximumFractionDigits(17);
            _msg.UnPack(data);
            _field = new TibField();
            _lastStatus = _field.First(_msg);
            _entry = new FieldEntry()
            {
                public short getDataType()
                {
                    return (_field.MfeedFid() == 0) ? _dictionary.getFidDef(_field.Name())
                            .getFieldId() // SASS field
                            : _dictionary.getFidDef((short)_field.MfeedFid()).getOMMType();
                }

                public short getFieldId()
                {
                    return (_field.MfeedFid() == 0) ? _dictionary.getFidDef(_field.Name()).getFieldId() // SASS field
                            : (short)_field.MfeedFid();
                }

                @SuppressWarnings("deprecation")
                public String getData()
                {
                    byte[] data = _field.RawData();
                    if (_field.Type() == TibMsg.TIBMSG_OPAQUE)
                    {
                        if (data.length == 3)
                        {
                            int value = Base64.convertBase64ToInt(data, 0, data.length);
                            return Integer.toString(value);
                        }
                        else
                        {
                            data = Base64.convertBase64ToBytes(data, 0, data.length);
                        }
                    }
                    if (data == null || data.length == 0)
                        return "";
                    // the new constructor is less performant
                    return new String(data, 0, 0, data.length);
                }
            };
        }