package com.doumee.jtt808.web.model.vo; import io.swagger.v3.oas.annotations.media.Schema; import org.yzh.protocol.commons.Charsets; import java.io.*; import java.time.LocalDate; import static io.github.yezhihao.protostar.util.DateTool.BCD; /** * @author yezhihao * https://gitee.com/yezhihao/jt808-server */ public class DeviceInfo { @Schema(description = "签发日期") protected LocalDate issuedAt; @Schema(description = "预留字段") protected byte reserved; @Schema(description = "设备id") protected String deviceId; public DeviceInfo() { } public DeviceInfo(byte[] bytes) { formBytes(bytes); } public DeviceInfo(String deviceId, LocalDate issuedAt) { this.deviceId = deviceId; this.issuedAt = issuedAt; } public LocalDate getIssuedAt() { return issuedAt; } public void setIssuedAt(LocalDate issuedAt) { this.issuedAt = issuedAt; } public byte getReserved() { return reserved; } public void setReserved(byte reserved) { this.reserved = reserved; } public String getDeviceId() { return deviceId; } public void setDeviceId(String deviceId) { this.deviceId = deviceId; } public DeviceInfo formBytes(byte[] bytes) { try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes); DataInputStream dis = new DataInputStream(bis)) { byte[] temp; dis.read(temp = new byte[3]); this.issuedAt = BCD.toDate(temp); this.reserved = dis.readByte(); int len = dis.readUnsignedByte(); dis.read(temp = new byte[len]); this.deviceId = new String(temp, Charsets.GBK); return this; } catch (IOException e) { throw new RuntimeException(e); } } public byte[] toBytes() { try (ByteArrayOutputStream bos = new ByteArrayOutputStream(32); DataOutputStream dos = new DataOutputStream(bos)) { dos.write(BCD.from(issuedAt)); dos.writeByte(reserved); byte[] bytes = deviceId.getBytes(Charsets.GBK); dos.writeByte(bytes.length); dos.write(bytes); return bos.toByteArray(); } catch (IOException e) { throw new RuntimeException(e); } } @Override public String toString() { final StringBuilder sb = new StringBuilder("DeviceInfo{"); sb.append("issuedAt=").append(issuedAt); sb.append(", reserved=").append(reserved); sb.append(", deviceId=").append(deviceId); sb.append('}'); return sb.toString(); } }