コード例 #1
0
        private ConstantPoolInfo[] ParseConstantPool(ref ReadOnlySpan <byte> fileData)
        {
            ushort poolCount = fileData.ReadTwoBytes();

            var infos = new ConstantPoolInfo[poolCount];

            for (int i = 1; i < poolCount; i++)
            {
                var tag = (ConstantPoolTag)fileData.ReadOneByte();
                switch (tag)
                {
                case ConstantPoolTag.Class:
                    infos[i] = new ClassInfo(ref fileData);
                    break;

                case ConstantPoolTag.Fieldref:
                    infos[i] = new FieldrefInfo(ref fileData);
                    break;

                case ConstantPoolTag.Methodref:
                    infos[i] = new MethodrefInfo(ref fileData);
                    break;

                case ConstantPoolTag.InterfaceMethodref:
                    infos[i] = new InterfaceMethodrefInfo(ref fileData);
                    break;

                case ConstantPoolTag.String:
                    infos[i] = new StringInfo(ref fileData);
                    break;

                case ConstantPoolTag.Integer:
                    infos[i] = new IntegerInfo(ref fileData);
                    break;

                case ConstantPoolTag.Float:
                    infos[i] = new FloatInfo(ref fileData);
                    break;

                case ConstantPoolTag.Long:
                    infos[i] = new LongInfo(ref fileData);
                    i++;
                    break;

                case ConstantPoolTag.Double:
                    infos[i] = new DoubleInfo(ref fileData);
                    i++;
                    break;

                case ConstantPoolTag.NameAndType:
                    infos[i] = new NameAndTypeInfo(ref fileData);
                    break;

                case ConstantPoolTag.Utf8:
                    infos[i] = new Utf8Info(ref fileData);
                    break;

                case ConstantPoolTag.MethodHandle:
                    fileData.ReadOneByte();
                    fileData.ReadTwoBytes();
                    break;

                case ConstantPoolTag.MethodType:
                    fileData.ReadTwoBytes();
                    break;

                case ConstantPoolTag.InvokeDynamic:
                    fileData.ReadFourBytes();
                    break;

                default:
                    throw new InvalidDataException();
                }
            }

            foreach (ConstantPoolInfo info in infos)
            {
                info?.Init(infos);
            }

            return(infos);
        }
コード例 #2
0
        /// <summary>
        /// 初始化逻辑类
        /// </summary>
        protected override void InitClass()
        {
            base.InitClass();


            ConfigNames.ReadFileAndSendEmailConfigName
                ni
                = new ConfigNames.ReadFileAndSendEmailConfigName();

            #region 构造

            #region EmailTextType ~ 邮件内容类型|text:纯文字;file:文件|如:text

            m_EmailTextType = new StringInfo(ni.EmailTextType);
            InfoList.Add(m_EmailTextType);

            #endregion EmailTextType ~ 邮件内容类型|text:纯文字;file:文件|如:text


            #region DirFullName ~ 完整的Dir名称|如:D:\one(无后缀)|或:~/执行程序所在的目录|如:~/

            m_DirFullName = new StringInfo(ni.DirFullName);
            InfoList.Add(m_DirFullName);

            #endregion DirFullName ~ 完整的Dir名称|如:D:\one(无后缀)|或:~/执行程序所在的目录|如:~/


            #region FileNameExpress ~ 文件名表达式|如:*_bak.log

            m_FileNameExpress = new StringInfo(ni.FileNameExpress);
            InfoList.Add(m_FileNameExpress);

            #endregion FileNameExpress ~ 文件名表达式|如:*_bak.log


            #region ReadFileEncoding ~ 读取文件编码|gb2312/utf8|如:gb2312

            m_ReadFileEncoding = new StringInfo(ni.ReadFileEncoding);
            InfoList.Add(m_ReadFileEncoding);

            #endregion ReadFileEncoding ~ 读取文件编码|gb2312/utf8|如:gb2312


            #region EmailTextFileMaxLength ~ 读取的文件允许最大值|如果是0,则不限,否则超过最大值就不需要读|B为单位|如:0

            m_EmailTextFileMaxLength = new LongInfo(ni.EmailTextFileMaxLength);
            InfoList.Add(m_EmailTextFileMaxLength);

            #endregion EmailTextFileMaxLength ~ 读取的文件允许最大值|如果是0,则不限,否则超过最大值就不需要读|B为单位|如:0

            #region FileNameToLower ~ 文件是否小写比较|如:true

            m_FileNameToLower = new BoolInfo(ni.FileNameToLower);
            InfoList.Add(m_FileNameToLower);

            #endregion FileNameToLower ~ 文件是否小写比较|如:true



            #endregion 构造
        }