1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
package com.netsdk.demo.customize;
 
import java.io.BufferedReader;
import java.io.FileReader;
import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
 
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.NetSDKLib.*;
 
import java.lang.reflect.Array;
 
 
public class PrintStruct {
    
    public static String FIELD_NOT_PRINT = "stuPtzLink stuSnapshotTitle stuVideoTitle stuTour stuPtzLinkEx";
    private static String FILE_PATH = "src/com/netsdk/lib/NetSDKLib.java"; 
    private static String BUILT_IN_TYPE = "byte short int long float double LLong";
    private static final long MAX_ARRAY_LEN_PRINT = 5;
    // TODO: 输出格式化处理
    public static void print(Object obj) {
        try {
            
            String classSimpleName = obj.getClass().getSimpleName();
            
            BufferedReader bufferedReader = new BufferedReader(new FileReader(FILE_PATH));
            String line;
            while ((line = bufferedReader.readLine()) != null)
                if (line.contains(classSimpleName) && line.contains("class")) {
                    String s = "class"+classSimpleName+"extends";
                    line = line.replaceAll("\\s", "");
                    if (line.contains(s)) {
                        break;
                    }
                }
                    
            
            if (line == null){
                    System.err.println("Can't find " + classSimpleName);
                    return;
            }
            
            Class  class1 = obj.getClass();
            int array_size = 1;
            while ((line = bufferedReader.readLine()) != null) {
                
                if (line.trim().equals("}"))
                    break;
                else if (!line.contains("public")) // 非属性
                    continue;
                
                String[] lineArr = line.trim().split("//");    
                String[] fieldArr = lineArr[0].split("\\s");
                // 修饰符 "public" 类型   名称   [= new 类型];
                String fieldType = getProperty(fieldArr, 2);
                String fieldName = getProperty(fieldArr, 3);
                if (fieldType.isEmpty() || fieldName.isEmpty()) {
                    System.err.println("parse line: " + line + " failed!");
                    continue;
                }
                
                String function = getProperty(fieldArr, 4);
                if (fieldType.contains("(") || fieldName.contains("(") || function.startsWith("(")) {
                    continue;
                }
                
                fieldName = fieldName.replace(";", "");
                
                if (FIELD_NOT_PRINT.contains(fieldName)) {
                    continue;
                }
                
                System.out.print(fieldName + " " + getProperty(lineArr, 2) + ": ");
                
                Field field = class1.getField(fieldName);
                Object fieldObject = field.get(obj);
                if (fieldObject == null) {
                    System.out.println("is null!");
                    continue;
                }
                if (fieldType.endsWith("[]")){
                    String OriginalType = fieldType.substring(0, fieldType.length()-2);
                    if (fieldType.startsWith("byte")) {
                        System.out.println(new String((byte[])fieldObject));
                    }else if (fieldType.startsWith("LLong")) {
                        for (LLong itemObject : (LLong[])fieldObject)
                            System.out.println(itemObject.longValue());
                    }else {
                        int len = Array.getLength(fieldObject);
                        if (array_size != 0 && array_size < len) {
                            len = array_size;
                        }
 
                        if (BUILT_IN_TYPE.contains(OriginalType)) {
                            for (int j = 0; j < len; ++j) {
                                System.out.print(Array.get(fieldObject, j) + " ");
                            }    
                        }else {
                            System.out.println();
                            for (int j = 0; j < len; ++j) {
                                System.out.println("第" + j + "个" + fieldObject.getClass().getSimpleName() + ":");
                                print(Array.get(fieldObject, j));
                            }
                        }
                        System.out.println();
                    }
                }else {
                    if (BUILT_IN_TYPE.contains(fieldType)) {
                        if (fieldType.startsWith("LLong")) {
                            System.out.println(((LLong)fieldObject).longValue());
                        }else {
                            if (fieldType.equals("int")) {
                                array_size = Integer.valueOf(fieldObject.toString());
                            }
                            System.out.println(fieldObject);
                        }
                    }else {
                        System.out.println();
                        System.out.println();
                        print(fieldObject);
                        System.out.println();
                    }
                }
            }
            bufferedReader.close();        
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private static String getProperty(String[] arr, int index) {
        int i = 0;
        for (String strProperty : arr) {
            String tmp = strProperty.replaceAll("\\s", "");
            if (!tmp.isEmpty()) {
                ++i;
            }
            
            if (index == i) {
                return tmp;
            }
        }
        
        return "";
    }
    
    public static void main(String []args) throws ParseException {
 
        NetSDKLib.DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO  faceDetect = new NetSDKLib.DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO();
        System.out.println(faceDetect.size()/4.0);
//        PrintStruct.print(faceDetect);
        
//        msg.stuTime.toStringTimeEx();
//        NET_TIME stuTime = new NET_TIME();
//        stuTime.setTime(2019, 8, 13, 10, 44, 44);
//        final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
//        Date utc = dateFormat.parse(stuTime.toStringTimeEx());
//                 
//        dateFormat.setTimeZone(TimeZone.getDefault());
//        System.out.println(dateFormat.format(utc.getTime()));
        
    }
 
}