Commit 4e2d0641 authored by 黄谋临's avatar 黄谋临
Browse files

添加DTO对象

parent a4a03037
...@@ -12,313 +12,432 @@ import java.util.Comparator; ...@@ -12,313 +12,432 @@ import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.SortedMap; import java.util.SortedMap;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.UUID;
import com.cusc.adas.v2x.vo.DynamicsClassMap;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
public class Parse { public class Parse {
public static <T> T parse(ByteBuf data, T t) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException { public static <T> T parse(ByteBuf data, T t) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException {
Field[] fields = t.getClass().getDeclaredFields(); Field [] fields = t.getClass().getDeclaredFields();
List<Field> fList = new ArrayList<>(); List<Field> fList = new ArrayList<>();
SortedMap<Integer, Field> rstMap = new TreeMap<>(); SortedMap<Integer,Field> rstMap = new TreeMap<>();
for (Field field : fields) { for(Field field : fields) {
if (field.isAnnotationPresent(Order.class)) { if (field.isAnnotationPresent(Order.class)) {
fList.add(field); fList.add(field);
} }
} }
Collections.sort(fList, new Comparator<Field>() { Collections.sort(fList, new Comparator<Field>() {
@Override @Override
public int compare(Field f1, Field f2) { public int compare(Field f1, Field f2) {
return f1.getAnnotation(Order.class).value() - f2.getAnnotation(Order.class).value(); return f1.getAnnotation(Order.class).value() - f2.getAnnotation(Order.class).value();
} }
}); });
for (Field field : fList) { for(Field field : fList) {
field.setAccessible(true); field.setAccessible(true);
if (field.isAnnotationPresent(Order.class)) { if (field.isAnnotationPresent(Order.class)) {
String fieldName = field.getName(); String fieldName = field.getName();
Order order = field.getAnnotation(Order.class); Order order = field.getAnnotation(Order.class);
System.out.println(fieldName); System.out.println(fieldName);
int num = order.value(); int num = order.value();
//基础数据类型 且 不是数组 //基础数据类型 且 不是数组
if (field.getType().isPrimitive() && !field.getType().isArray()) { if(field.getType().isPrimitive() && !field.getType().isArray() ) {
// data.re // data.re
// field.set(fList, rstMap); // field.set(fList, rstMap);
readBuf(t, field, data); readBuf(t,field,data);
} else if (field.getClass().isPrimitive() && field.getType().isArray()) { }else if( field.getType().isArray()){
// 基础数据类型 且 是数组 // 基础数据类型 且 是数组
} else if (List.class.isAssignableFrom(field.getType())) { readBuf(t,field,data);
// 集合类型 }else if(List.class.isAssignableFrom(field.getType())) {
//读取属性的注解是否引用其他字段的长度 // 集合类型
if (field.isAnnotationPresent(RefNumFlag.class)) { //读取属性的注解是否引用其他字段的长度
if( field.isAnnotationPresent(RefNumFlag.class) && !field.isAnnotationPresent(DynamicsClassDef.class) ) {
RefNumFlag refNumFlag = field.getAnnotation(RefNumFlag.class);
String refField = refNumFlag.value(); RefNumFlag refNumFlag = field.getAnnotation(RefNumFlag.class);
Class<?> clazz1 = t.getClass(); String refField = refNumFlag.value();
Field nameField = clazz1.getDeclaredField(refField); Class<?> clazz1 = t.getClass();
Type genericType = nameField.getGenericType(); Field nameField = clazz1.getDeclaredField(refField);
nameField.setAccessible(true); Type genericType = field.getGenericType();
nameField.setAccessible(true);
if (genericType instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) genericType; if (genericType instanceof ParameterizedType) {
Type[] actualTypes = pt.getActualTypeArguments(); ParameterizedType pt = (ParameterizedType) genericType;
if (actualTypes.length > 0) { Type[] actualTypes = pt.getActualTypeArguments();
actualTypes[0].getClass(); if (actualTypes!=null && actualTypes.length > 0) {
int len = (int) nameField.get(t); actualTypes[0].getClass();
for (int i = 0; i < len; i++) { long len = 0l;
actualTypes[0].getClass(); if(nameField.getType()==short.class) {
} short val= (short) nameField.get(t);
} len = (long)val;
} }else if(nameField.getType()==int.class) {
} int val= (int) nameField.get(t);
len = (long)val;
} else if (field.getType() == String.class) { }else if(nameField.getType()==long.class) {
//类型为字符串 len = (long) nameField.get(t);
readBuf(t, field, data); }
} else { //short len= (short) nameField.get(t);
//其他对象类型 if(len>0) {
Class<?> cls = Class.forName(field.getType().getName()); List list = new ArrayList<>();
Object obj = cls.newInstance(); for(int i=0;i<len;i++) {
String classname = actualTypes[0].getTypeName();
parse(data, obj); Object obj = null;
field.set(t, obj); if(classname.contains("Short") ) {
} obj = data.readUnsignedByte();
rstMap.put(num, field); }else if(classname.contains("Integer")) {
} obj = data.readUnsignedShort();
} }else if(classname.contains("Long")) {
return t; obj = data.readUnsignedInt();
} }else {
Class<?> cls = Class.forName(actualTypes[0].getTypeName()); ;
/** obj = cls.newInstance();
* 读取字节流 parse(data, obj);
* }
* @param t
* @param field
* @param data list.add(obj);
* @throws IllegalArgumentException }
* @throws IllegalAccessException System.out.println("actualTypes::"+actualTypes[0].getTypeName());
*/ field.set(t, list);
public static void readBuf(Object t, Field field, ByteBuf data) throws IllegalArgumentException, IllegalAccessException { }
if (data.readerIndex() == data.maxCapacity())
return; }
FieldDef fieldDef = null; }
if (field.isAnnotationPresent(FieldDef.class)) { }else if(field.isAnnotationPresent(RefNumFlag.class) && field.isAnnotationPresent(DynamicsClassDef.class)) {
fieldDef = field.getAnnotation(FieldDef.class);
} DynamicsClassDef dynamicsClassDef = field.getAnnotation(DynamicsClassDef.class);
String classtype = dynamicsClassDef.classtype();
Class<?> type = field.getType(); DependencyDef dependencyDef = field.getAnnotation(DependencyDef.class);
String fieldname = dependencyDef.value();
if (type == String.class && fieldDef != null && fieldDef.type().equals("BYTE")) { Field tField2 = t.getClass().getDeclaredField(fieldname);
byte[] by = new byte[fieldDef.length()]; tField2.setAccessible(true);
data.readBytes(by); Short value =(Short) tField2.get(t);
String str = new String(by, StandardCharsets.UTF_8);
field.set(t, str); RefNumFlag refNumFlag = field.getAnnotation(RefNumFlag.class);
} else if (type == short.class) { String refFieldName = refNumFlag.value() ;
field.set(t, data.readUnsignedByte()); Field tField = t.getClass().getDeclaredField(fieldname);
} else if (type == int.class) { tField.setAccessible(true);
field.set(t, data.readUnsignedShort()); Field tField1 = t.getClass().getDeclaredField(refFieldName);
} else if (type == long.class && fieldDef == null) { tField1.setAccessible(true);
field.set(t, data.readUnsignedInt()); Integer len= (Integer)tField1.get(t);
} else if (type == long.class && fieldDef != null && fieldDef.type().equals("TIMESTAMP") && fieldDef.length() == 8) { if(len>0) {
field.set(t, data.readLong()); Class clazz1 =DynamicsClassMap.get(classtype,value );
} else if (type == long.class && fieldDef != null && fieldDef.type().equals("BYTE")) { Class<?> cls = Class.forName(clazz1.getName());
field.set(t, data.readLong()); List<Object> list = new ArrayList<>();
} for(int i=0;i<len;i++) {
} Object obj = cls.newInstance();
System.out.println("clazz1 name::"+clazz1.getName());
public static byte[] longToBytes(long value) { parse(data, obj);
ByteBuffer buffer = ByteBuffer.allocate(8); list.add(obj);
buffer.order(ByteOrder.BIG_ENDIAN); // 指定小端模式 }
buffer.putLong(value); // 将long值存入buffer field.set(t, list);
return buffer.array(); // 获取byte数组 }
}
public static byte[] longToBytes1(long value) { }
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.order(ByteOrder.BIG_ENDIAN); // 指定小端模式 }else if(field.getType()==String.class) {
buffer.putLong(value); // 将long值存入buffer //类型为字符串
return buffer.array(); // 获取byte数组 readBuf(t,field,data);
} }else {
//其他对象类型
public static byte[] intToBytes(int value) {
ByteBuffer buffer = ByteBuffer.allocate(4); if(data.readerIndex()==data.maxCapacity() ) {
buffer.order(ByteOrder.BIG_ENDIAN); // 指定小端模式 return t;
buffer.putLong(value); // 将long值存入buffer }
return buffer.array(); // 获取byte数组 if(field.isAnnotationPresent(DynamicsClassDef.class)) {
} DynamicsClassDef dynamicsClassDef = field.getAnnotation(DynamicsClassDef.class);
String classtype = dynamicsClassDef.classtype();
DependencyDef dependencyDef = field.getAnnotation(DependencyDef.class);
public static String byteToHexString(byte[] bytes) { String fieldname = dependencyDef.value();
StringBuilder sb = new StringBuilder(); Field tField2 = t.getClass().getDeclaredField(fieldname);
for (byte b : bytes) { tField2.setAccessible(true);
sb.append(String.format("%02x", b));
}
return sb.toString(); Short key= (Short)tField2.get(t);
Class clazz1 =DynamicsClassMap.get(classtype,key );
//return null; Class<?> cls = Class.forName(clazz1.getName());
Object obj = cls.newInstance();
parse(data, obj);
field.set(t, obj);
}else {
Class<?> cls = Class.forName(field.getType().getName());
Object obj = cls.newInstance();
parse(data, obj);
field.set(t, obj);
}
}
rstMap.put(num,field);
}
}
return t;
}
/**
* 读取字节流
* @param t
* @param field
* @param data
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws SecurityException
* @throws NoSuchFieldException
*/
public static void readBuf(Object t, Field field,ByteBuf data ) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
if(data.readerIndex()==data.maxCapacity() )
return ;
FieldDef fieldDef =null;
if(field.isAnnotationPresent(FieldDef.class)) {
fieldDef = field.getAnnotation(FieldDef.class);
}
RefNumFlag refNumFlag =null;
if(field.isAnnotationPresent(RefNumFlag.class)) {
refNumFlag = field.getAnnotation(RefNumFlag.class);
}
Class<?> type = field.getType();
if(type==String.class && fieldDef!=null &&fieldDef.type().equals("BYTE")) {
byte[]by = new byte[fieldDef.length()];
data.readBytes(by);
String str = new String(by, StandardCharsets.UTF_8);
field.set(t, str);
}else if(type==short.class) {
field.set(t, data.readUnsignedByte());
}else if(type==int.class) {
field.set(t, data.readUnsignedShort());
}else if(type==long.class && fieldDef==null ) {
field.set(t, data.readUnsignedInt());
}else if(type==long.class && fieldDef!=null &&fieldDef.type().equals("TIMESTAMP") && fieldDef.length()==8 ) {
field.set(t, data.readLong());
}else if(type==long.class && fieldDef!=null &&fieldDef.type().equals("BYTE") ) {
field.set(t, data.readLong());
}else if(field.getType().isArray()&& refNumFlag!=null) {
Field tField = t.getClass().getDeclaredField(refNumFlag.value());
tField.setAccessible(true);
Class<?> type1 = tField.getType();
byte[] by = null;
if(type1==byte.class) {
Byte obj =(Byte) tField.get(t);
by = new byte[obj.byteValue()];
}else if(type1==short.class) {
Short obj =(Short) tField.get(t);
by = new byte[obj.shortValue()];
}else if(type1==int.class) {
Integer obj =(Integer) tField.get(t);
by = new byte[obj.intValue()];
}
data.readBytes(by);
field.set(t, by);
}
}
public static byte[] longToBytes(long value) {
ByteBuffer buffer = ByteBuffer.allocate(8);
buffer.order(ByteOrder.BIG_ENDIAN); // 指定小端模式
buffer.putLong(value); // 将long值存入buffer
return buffer.array(); // 获取byte数组
}
public static byte[] longToBytes1(long value) {
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.order(ByteOrder.BIG_ENDIAN); // 指定小端模式
buffer.putLong(value); // 将long值存入buffer
return buffer.array(); // 获取byte数组
}
public static byte[] intToBytes(int value) {
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.order(ByteOrder.BIG_ENDIAN); // 指定小端模式
buffer.putLong(value); // 将long值存入buffer
return buffer.array(); // 获取byte数组
}
public static String byteToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
//return null;
// ByteBuffer buffer = ByteBuffer.allocate(8); // ByteBuffer buffer = ByteBuffer.allocate(8);
// buffer.order(ByteOrder.LITTLE_ENDIAN); // 指定小端模式 // buffer.order(ByteOrder.LITTLE_ENDIAN); // 指定小端模式
// buffer.putLong(value); // 将long值存入buffer // buffer.putLong(value); // 将long值存入buffer
// return buffer.array(); // 获取byte数组 // return buffer.array(); // 获取byte数组
} }
public static String long2Hex(long num, int len) {
public static String long2Hex(long num, int len) { String hex = Long.toHexString(num);
String hex = Long.toHexString(num); int padLength = len * 2;
int padLength = len * 2; if (hex.length() >= padLength) {
if (hex.length() >= padLength) { return hex.substring(hex.length() - padLength); // 超长时截断
return hex.substring(hex.length() - padLength); // 超长时截断 }
} return String.format("%0" + padLength + "d", 0).replace("0", "0") + hex; // 或直接格式化
return String.format("%0" + padLength + "d", 0).replace("0", "0") + hex; // 或直接格式化 }
}
public static void main(String [] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException {
String hexString = "F20000000015018cb864640000000000";
String hexString = "F20000000015018cb864640000000000"; byte[] bytes = HexStringToByteArray.hexStringToByteArray(hexString);
byte[] bytes = HexStringToByteArray.hexStringToByteArray(hexString); ByteBuf byteBuf = Unpooled.buffer(16);
ByteBuf byteBuf = Unpooled.buffer(16); long l = 500000;
long l = 500000; //3600000000
//3600000000 // 1164916946
// 1164916946 // byte [] bs = Long.toHexString(l);
// byte [] bs = Long.toHexString(l); String s = long2Hex(l,4);
String s = long2Hex(l, 4); //longToBytes1(l);
//longToBytes1(l); long i = 250000;
int i = 33; String hex = Long.toHexString(i);
String hex = Integer.toHexString(i);
int i1 = 1500;
String vid = "T1023459"; hex = Integer.toHexString(i1);
byte[] by1 = vid.getBytes();
s = byteToHexString(by1); String uuid = UUID.randomUUID().toString();
byte[] by2 = uuid.getBytes();
System.out.println(s); s = byteToHexString(by2);
String vid = "JL110001";
byte[] by1 = vid.getBytes();
s = byteToHexString(by1);
System.out.println(s);
// //
// //
// List<Byte> byteList = new ArrayList<Byte>(); // List<Byte> byteList = new ArrayList<Byte>();
// //
// Byte[] bytes = byteList.toArray(new Byte[byteList.size()]); // Byte[] bytes = byteList.toArray(new Byte[byteList.size()]);
//byte[] bs = convoter(bytes); //byte[] bs = convoter(bytes);
//byteBuf.writeBytes(bytes); //byteBuf.writeBytes(bytes);
//VehicleMessage vehicleMessage = parse(byteBuf,new VehicleMessage()); //VehicleMessage vehicleMessage = parse(byteBuf,new VehicleMessage());
//System.out.print(vehicleMessage); //System.out.print(vehicleMessage);
} }
public static void convoterBean(Object source, Object target) { public static void convoterBean( Object source , Object target) throws IllegalArgumentException, IllegalAccessException, ClassNotFoundException, InstantiationException, NoSuchFieldException, SecurityException {
Field field; Field [] fields = source.getClass().getDeclaredFields();
Field tField; //List<Field> fList = new ArrayList<>();
try { //SortedMap<Integer,Field> rstMap = new TreeMap<>();
Field[] fields = source.getClass().getDeclaredFields(); for(Field field : fields) {
//List<Field> fList = new ArrayList<>(); field.setAccessible(true);
//SortedMap<Integer,Field> rstMap = new TreeMap<>(); Object o= field.get(source);
for (Field cfield : fields) { if(o==null) {
field = cfield; continue;
field.setAccessible(true); }
Object o = field.get(source);
if (o == null) { OffsetDef offsetDef =null;
continue; if(field.isAnnotationPresent(OffsetDef.class)) {
} offsetDef = field.getAnnotation(OffsetDef.class);
}
OffsetDef offsetDef = null; //获取目标对象指定的属性
if (field.isAnnotationPresent(OffsetDef.class)) { Field tField = target.getClass().getDeclaredField(field.getName());
offsetDef = field.getAnnotation(OffsetDef.class); tField.setAccessible(true);
} if (field.isAnnotationPresent(Order.class)) {
//获取目标对象指定的属性 if(field.getType().isPrimitive() && !field.getType().isArray() ) {
tField = target.getClass().getDeclaredField(field.getName()); //如果属性添加了自定义注解 offset
tField.setAccessible(true);
if (field.isAnnotationPresent(Order.class)) { Class<?> type = field.getType();
if (field.getType().isPrimitive() && !field.getType().isArray()) { if(offsetDef!=null) {
//如果属性添加了自定义注解 offset double offset =offsetDef.value();
int type1 =offsetDef.type();
Class<?> type = field.getType(); int minValidLength =offsetDef.minValidLength();
if (offsetDef != null) {
double offset = offsetDef.value(); //startindex
int type1 = offsetDef.type();
int minValidLength = offsetDef.minValidLength(); if(type==byte.class) {
tField.set(target, o);
//startindex }else if(type==short.class) {
if (type == byte.class) { if(minValidLength>0 ) {
tField.set(target, o); int len = String.valueOf((Short)o).length();
} else if (type == short.class) { if(len<minValidLength) {
int subtract = minValidLength-len;
if (minValidLength > 0) { double f =(Short)o*Math.pow(10, subtract)*offset;
int len = String.valueOf((Short) o).length(); tField.set(target, (float)f);
if (len < minValidLength) { }else {
int subtract = minValidLength - len; double f =(Short)o*offset;
double f = (Short) o * Math.pow(10, subtract) * offset; tField.set(target, (float)f);
tField.set(target, (float) f); }
} else { }else {
double f = (Short) o * offset; double f =(Short)o*offset;
tField.set(target, (float) f); tField.set(target, (float)f);
} }
} else {
double f = (Short) o * offset;
tField.set(target, (short) f);
} }else if(type==int.class) {
if(minValidLength>0 ) {
int len = String.valueOf((Integer)o).length();
} else if (type == int.class) { if(len<minValidLength) {
if (minValidLength > 0) { int subtract = minValidLength-len;
int len = String.valueOf((Integer) o).length(); double f =(Integer)o*Math.pow(10, subtract)*offset;
if (len < minValidLength) { tField.set(target, (float)f);
int subtract = minValidLength - len; }else {
double f = (Integer) o * Math.pow(10, subtract) * offset; double f =(Integer)o*offset;
tField.set(target, (float) f); tField.set(target, (float)f);
} else { }
double f = (Integer) o * offset; }else {
tField.set(target, (float) f); double f =(Integer)o*offset;
} tField.set(target, (float)f);
} else { }
double f = (Integer) o * offset; }else if(type==long.class) {
tField.set(target, (float) f); if(minValidLength>0 ) {
} int len = String.valueOf((Long)o).length();
} else if (type == long.class) { if(len<minValidLength) {
if (minValidLength > 0) { int subtract = minValidLength-len;
int len = String.valueOf((Long) o).length(); double f =(Long)o*Math.pow(10, subtract)*offset;
if (len < minValidLength) { tField.set(target, (float)f);
int subtract = minValidLength - len; }else {
double f = (Long) o * Math.pow(10, subtract) * offset; double f =(Long)o*offset;
tField.set(target, (float) f); tField.set(target, (float)f);
} else { }
double f = (Long) o * offset; }else {
tField.set(target, (float) f); double d =(Long)o*offset;
}
} else { tField.set(target, d);
double d = (Long) o * offset; }
}
tField.set(target, (float)d);
}
} }else {
tField.set(target, o);
}
} else {
tField.set(target, o); }else if(field.getClass().isPrimitive() && field.getType().isArray()){
} // 基础数据类型 且 是数组
}else if(List.class.isAssignableFrom(field.getType())) {
} else if (field.getClass().isPrimitive() && field.getType().isArray()) { // 集合类型
// 基础数据类型 且 是数组 //读取属性的注解是否引用其他字段的长度
} else if (List.class.isAssignableFrom(field.getType())) { if( field.isAnnotationPresent(RefNumFlag.class)) {
// 集合类型
//读取属性的注解是否引用其他字段的长度
if (field.isAnnotationPresent(RefNumFlag.class)) {
// RefNumFlag refNumFlag = field.getAnnotation(RefNumFlag.class); // RefNumFlag refNumFlag = field.getAnnotation(RefNumFlag.class);
// String refField = refNumFlag.value(); // String refField = refNumFlag.value();
// Class<?> clazz1 = t.getClass(); // Class<?> clazz1 = t.getClass();
// Field nameField = clazz1.getDeclaredField(refField); // Field nameField = clazz1.getDeclaredField(refField);
// Type genericType = nameField.getGenericType(); // Type genericType = nameField.getGenericType();
// nameField.setAccessible(true); // nameField.setAccessible(true);
// //
// if (genericType instanceof ParameterizedType) { // if (genericType instanceof ParameterizedType) {
// ParameterizedType pt = (ParameterizedType) genericType; // ParameterizedType pt = (ParameterizedType) genericType;
// Type[] actualTypes = pt.getActualTypeArguments(); // Type[] actualTypes = pt.getActualTypeArguments();
...@@ -330,51 +449,47 @@ public class Parse { ...@@ -330,51 +449,47 @@ public class Parse {
// } // }
// } // }
// } // }
} }
} else if (field.getType() == String.class) { }else if(field.getType()==String.class) {
//类型为字符串 //类型为字符串
// try { // try {
// String s = (String)o; // String s = (String)o;
// String s1 = new String(s.getBytes()); // String s1 = new String(s.getBytes());
tField.set(target, o); tField.set(target, o);
// }catch(Exception e) { // }catch(Exception e) {
// e.printStackTrace(); // e.printStackTrace();
// } // }
} else { }else {
//其他对象类型 //其他对象类型
Class<?> cls = Class.forName(tField.getType().getName()); Class<?> cls = Class.forName(tField.getType().getName());
Object obj = cls.newInstance(); Object obj = cls.newInstance();
convoterBean(o, obj); convoterBean(o, obj);
tField.set(target, obj); tField.set(target, obj);
} }
} }
} }
} catch (IllegalArgumentException e) { }
System.out.println("e = " + e.getMessage());
} catch (IllegalAccessException e) { public static byte[] convoter(Byte[] bytes) {
System.out.println("e = " + e.getMessage()); byte [] bs = new byte[bytes.length];
} catch (ClassNotFoundException e) { int i=0;
System.out.println("e = " + e.getMessage()); for(Byte b :bytes ) {
} catch (InstantiationException e) { bs[i++] = b;
System.out.println("e = " + e.getMessage()); }
} catch (NoSuchFieldException e) { return bs;
System.out.println("e = " + e.getMessage()); }
} catch (SecurityException e) { /**
System.out.println("e = " + e.getMessage()); * 16进制转2进制
} * @param hex
* @return
*/
public static String convertHexToBinary(String hex) {
// 将16进制数转换为10进制Integer
int decimal = Integer.parseInt(hex, 16);
// 将10进制数转换为2进制字符串
return Integer.toBinaryString(decimal);
} }
public static byte[] convoter(Byte[] bytes) {
byte[] bs = new byte[bytes.length];
int i = 0;
for (Byte b : bytes) {
bs[i++] = b;
}
return bs;
}
} }
...@@ -20,9 +20,9 @@ public class SM4Utils { ...@@ -20,9 +20,9 @@ public class SM4Utils {
} }
/** /**
* ???? SM4 ??? * 生成 SM4 密钥
* @return ????? Base64 ????????? * @return 密钥的 Base64 编码字符串
* @throws Exception ?? * @throws Exception 异常
*/ */
public static String generateKey() throws Exception { public static String generateKey() throws Exception {
KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM_NAME, "BC"); KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM_NAME, "BC");
...@@ -32,11 +32,11 @@ public class SM4Utils { ...@@ -32,11 +32,11 @@ public class SM4Utils {
} }
/** /**
* SM4 ???? * SM4 加密
* @param plainText ???? * @param plainText 明文
* @param key ????? Base64 ????????? * @param key 密钥的 Base64 编码字符串
* @return ????? Base64 ????????? * @return 密文的 Base64 编码字符串
* @throws Exception ?? * @throws Exception 异常
*/ */
public static String encrypt(String plainText, String key) throws Exception { public static String encrypt(String plainText, String key) throws Exception {
byte[] keyBytes = Base64.getDecoder().decode(key); byte[] keyBytes = Base64.getDecoder().decode(key);
...@@ -48,11 +48,11 @@ public class SM4Utils { ...@@ -48,11 +48,11 @@ public class SM4Utils {
} }
/** /**
* SM4 ???? * SM4 解密
* @param cipherText ????? Base64 ????????? * @param cipherText 密文的 Base64 编码字符串
* @param key ????? Base64 ????????? * @param key 密钥的 Base64 编码字符串
* @return ???? * @return 明文
* @throws Exception ?? * @throws Exception 异常
*/ */
public static String decrypt(String cipherText, String key) throws Exception { public static String decrypt(String cipherText, String key) throws Exception {
byte[] keyBytes = Base64.getDecoder().decode(key); byte[] keyBytes = Base64.getDecoder().decode(key);
......
package com.cusc.adas.v2x.vehiclesubscribe.vo; package com.cusc.adas.v2x.vehiclesubscribe.vo;
import com.cusc.adas.v2x.utils.FieldDef;
import com.cusc.adas.v2x.utils.NumFlag;
import com.cusc.adas.v2x.utils.Order;
import com.cusc.adas.v2x.utils.RefNumFlag;
public class VehicleSubscribeMessageBody { public class VehicleSubscribeMessageBody {
@Order(1)
@FieldDef(type="BYTE",isArray=true,length=8)
private String vehicleId; private String vehicleId;
@Order(2)
private byte subsLen; @NumFlag
private short subsLen;
private Byte[] funcSubscribe; @Order(3)
@RefNumFlag(value="subsLen")
@FieldDef(type="BYTE[N]",isArray=true)
private byte[] funcSubscribe;
......
package com.cusc.adas.v2x.vo;
import java.util.HashMap;
import java.util.Map;
import com.cusc.adas.v2x.assist.vo.TrafficLight;
import com.cusc.adas.v2x.clouddecision.vo.AbnormalVehicle;
import com.cusc.adas.v2x.clouddecision.vo.AutoSpeedLimit;
import com.cusc.adas.v2x.clouddecision.vo.EmergencyVehicle;
import com.cusc.adas.v2x.clouddecision.vo.FawWarnning;
import com.cusc.adas.v2x.clouddecision.vo.RSIWarnning;
import com.cusc.adas.v2x.clouddecision.vo.TrafficLightInfo;
public class DynamicsClassMap {
private static Map<String,Map<Short,Class>> map = new HashMap<>();
static {
Map<Short,Class> cloundDecisionsubMap = new HashMap<>();
// 参考 adviceType 列表定义
cloundDecisionsubMap.put((short)1, TrafficLightInfo.class);//信号灯路口车速引导功能指令
cloundDecisionsubMap.put((short)5, AutoSpeedLimit.class);//动态车道级限速指令
cloundDecisionsubMap.put((short)9, FawWarnning.class);//前向碰撞预警
cloundDecisionsubMap.put((short)11, AbnormalVehicle.class);//异常车辆预警
cloundDecisionsubMap.put((short)13, EmergencyVehicle.class);//紧急车辆预警
cloundDecisionsubMap.put((short)17, RSIWarnning.class);//通用 RSI 预警
map.put("CloudDecision",cloundDecisionsubMap );
Map<Short,Class> assistSubMap = new HashMap<>();
assistSubMap.put((short)7, TrafficLight.class);
map.put("assist",assistSubMap );
}
public static Class get(String classtype,Short classkey) {
Map<Short,Class> subMap = map.get(classtype);
return subMap.get(classkey);
}
}
...@@ -8,9 +8,9 @@ public class VehicleMessageBody { ...@@ -8,9 +8,9 @@ public class VehicleMessageBody {
@Order(1) @Order(1)
private VehicleInfo vehicleInfo; private VehicleInfo vehicleInfo;
/****车辆辅助驾驶信息及状态信息*/ /****车辆辅助驾驶信息及状态信息*/
// @Order(2) @Order(2)
// private VehicleStatusInfo vehicleStatusInfo; private VehicleStatusInfo vehicleStatusInfo;
// //车辆自动驾驶信息 // //车辆自动驾驶信息
// @Order(3) @Order(3)
// private AutomaticDriveInfo automaticDriveInfo; private AutomaticDriveInfo automaticDriveInfo;
} }
...@@ -110,11 +110,11 @@ public class VehicleStatusInfo { ...@@ -110,11 +110,11 @@ public class VehicleStatusInfo {
//数据偏移量 200,表示-200.00 m/s~200.00 m/s, //数据偏移量 200,表示-200.00 m/s~200.00 m/s,
@Order(27) @Order(27)
@RefNumFlag(value="wheelNum") @RefNumFlag(value="wheelNum")
private int[] wheelVelocity; private List<Integer> wheelVelocity;
//胎压 //胎压
@Order(28) @Order(28)
@RefNumFlag(value="wheelNum") @RefNumFlag(value="wheelNum")
private int[] tirePressure; private List<Integer> tirePressure;
//车灯状态 BIT2 = 左转灯 BIT3 = 右转灯 //车灯状态 BIT2 = 左转灯 BIT3 = 右转灯
@Order(30) @Order(30)
private int lights; private int lights;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment