public static ConstantPoolDescription ParseData(byte[] data, ref int pos)
        {
            ConstantPoolDescription res = new ConstantPoolDescription();

            res.Tag = (ConstantPoolTag)data[pos++];
            switch (res.Tag)
            {
            case ConstantPoolTag.CONSTANT_Class:
                res.Info = CONSTANT_Class_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_Fieldref:
            case ConstantPoolTag.CONSTANT_Methodref:
            case ConstantPoolTag.CONSTANT_InterfaceMethodref:
                res.Info = CONSTANT_GeneralRef_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_String:
                res.Info = CONSTANT_String_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_Integer:
            case ConstantPoolTag.CONSTANT_Float:
                res.Info = CONSTANT_B4_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_Long:
            case ConstantPoolTag.CONSTANT_Double:
                res.Info = CONSTANT_B8_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_NameAndType:
                res.Info = CONSTANT_NameAndType_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_Utf8:
                res.Info = CONSTANT_Utf8_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_MethodHandle:
                res.Info = CONSTANT_MethodHandle_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_MethodType:
                res.Info = CONSTANT_MethodType_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_InvokeDynamic:
                res.Info = CONSTANT_InvokeDynamic_info.ParseData(data, ref pos);
                break;
            }
            return(res);
        }
        public static CONSTANT_B8_info ParseData(byte[] data, ref int pos)
        {
            CONSTANT_B8_info res = new CONSTANT_B8_info();

            for (int i = 0; i < 4; ++i)
            {
                res.HighBytes[i] = data[pos++];
            }
            Utils.ReverseIfEndian(res.HighBytes);
            for (int i = 0; i < 4; ++i)
            {
                res.LowBytes[i] = data[pos++];
            }
            Utils.ReverseIfEndian(res.LowBytes);
            return(res);
        }