public static byte[] buildIotDeviceData(List<IotDeviceModel> iotDeviceModels, int timestamp) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream w = new DataOutputStream(baos); try { w.write(Const.COMMAND_REPORT); // 循环长度 w.writeInt(iotDeviceModels.size()); w.writeInt(timestamp); iotDeviceModels.forEach(x -> { try { w.writeInt(x.getTagIotUid()); w.write(x.getTagType().getBytes()); //子数据长度 w.writeInt(x.getDeviceDataList().size()); x.getDeviceDataList().forEach(j -> { //上传数据时间为差值:当前时间戳-业务数据时间戳=差值 try { w.writeInt((timestamp - j.getDataTime())); byte[] dataValue = j.getDataValue().getBytes(); int size = dataValue.length; w.writeInt(size); //一个个字节写入 for (int i = size - 1; i >= 0; i--) { w.write(dataValue[i]); } } catch (IOException e) { e.printStackTrace(); } }); } catch (IOException e) { e.printStackTrace(); } }); w.flush(); } catch (IOException e) { e.printStackTrace(); } return baos.toByteArray(); }
时间: 2024-02-10 10:32:25 浏览: 166
这段代码是一个静态方法,用于将一个由IotDeviceModel对象组成的列表转换成字节数组。参数`iotDeviceModels`是IotDeviceModel对象的列表,`timestamp`是当前时间戳。方法返回一个字节数组。
方法首先创建一个`ByteArrayOutputStream`对象`baos`和一个`DataOutputStream`对象`w`,用于将数据写入字节数组。然后,方法写入一个报告命令的标志位`Const.COMMAND_REPORT`,接着写入循环长度,即`iotDeviceModels`列表的长度,和时间戳。接下来,方法使用`forEach`方法遍历`iotDeviceModels`列表中的每个IotDeviceModel对象。对于每个IotDeviceModel对象,方法将其`tagIotUid`、`tagType`属性和子数据长度写入字节数组。然后,方法使用`forEach`方法遍历当前IotDeviceModel对象的`deviceDataList`列表中的每个`DeviceData`对象。对于每个`DeviceData`对象,方法将当前时间戳与业务数据时间戳的差值、数据值的长度和数据值本身写入字节数组。最后,方法返回字节数组。
总的来说,这段代码的功能是将一组IotDeviceModel对象及其子数据转换成字节数组,用于上传到云端。
阅读全文