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); }
/// <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 构造 }