public PrimitiveArrayInfo(DumpPrimitiveArray org)
        {
            PrimitiveArrayID = org.PrimitiveArrayID;

            Type = org.Type;

            ElementDatas = new List <object>();
            for (var start = 0; start < org.ElementDatas.Length;)
            {
                var t = PrimitiveTypeHelper.GetPrimitiveValue(org.Type, org.ElementDatas, ref start);
                ElementDatas.Add(t);
            }
            if (Type == PrimitiveType.HPROF_BASIC_CHAR)
            {
                if (ElementDatas.Count > 0)
                {
                    //if (ElementDatas.Exists(c=>(short)c>255 || (short)c<0))//此处为Unicode编码
                    {
                        var temp = ElementDatas.Select(c => (short)c).ToArray();
                        var t2   = ByteConverter.Arr2Arr <short, byte>(temp);
                        StringData = Encoding.Unicode.GetString(t2);
                    }
                    // else//此处为ASCII编码
                    // {
                    //     var temp = ElementDatas.Select(c => (byte)(short)c).ToArray();
                    //     StringData = Encoding.Default.GetString(temp);
                    // }
                }
                else
                {
                    StringData = "";
                }
            }
        }
        public static HeapDumpSegment Deserialize(this HeapDumpSegment input, BinaryReader br)
        {
            (input as HeapRawData).Deserialize(br);
            if (input.RawData[0] == (byte)DumpObjectTag.HEAP_INFO)
            {
                input.SegmentType = DumpSegmentType.ObjectInstance;

                int startIndex = 1;                                                                //原本正常的情况
                input.HeapInfo        = new HeapInfo().Deserialize(input.RawData, ref startIndex); //原本正常的情况
                input.HeapDumpObjects = new List <HeapDumpObject>();
                //int startIndex = 0; //学长的特殊情况,不导出HeapInfo
                while (startIndex < input.RawData.Length)
                {
                    HeapDumpObject newObject = null;
                    var            flag      = input.RawData[startIndex];
                    ++startIndex;
                    switch (flag)
                    {
                    case (byte)DumpObjectTag.CLASS_OBJECT:
                        newObject = new DumpClassObject().Deserialize(input.RawData, ref startIndex, input);
                        break;

                    case (byte)DumpObjectTag.OBJECT_ARRAY:
                        newObject = new DumpObjectArray().Deserialize(input.RawData, ref startIndex);
                        break;

                    case (byte)DumpObjectTag.OBJECT_INSTANCE:
                        newObject = new DumpObjectInstance().Deserialize(input.RawData, ref startIndex);
                        break;

                    case (byte)DumpObjectTag.PRIMITIVE_ARRAY_WITH_DATA:
                        newObject = new DumpPrimitiveArray().Deserialize(input.RawData, ref startIndex);
                        break;

                    case (byte)DumpObjectTag.PRIMITIVE_ARRAY_WITHOUT_DATA:
                        newObject = new DumpPrimitiveArrayNoData().Deserialize(input.RawData, ref startIndex);
                        break;

                    default:
                        throw new Exception("尚未处理的Dump类型: " + input.RawData[startIndex]);
                    }
                    input.HeapDumpObjects.Add(newObject);
                }
            }
            else
            {
                input.SegmentType = DumpSegmentType.RootSet;
            }
            return(input);
        }