`

消息构造器

    博客分类:
  • Java
 
阅读更多

public class MessageArrayBuilder {
    private int capacity = 20;
   
    private int length = 0;

    public void setCapacity(int capacity) {
        if (capacity > 0) {
            this.capacity = capacity;
        }
    }

    public MessageArrayBuilder() {}

    public MessageArrayBuilder(int capacity) {
        setCapacity(capacity);
    }

    private byte[] array = new byte[capacity];
    private int index = 0 ;

    public MessageArrayBuilder append(byte b) {
        if (index >= array.length) {
            byte[] newArray = new byte[array.length + capacity];
            System.arraycopy(array, 0, newArray, 0, array.length);
            array = newArray;
        }
        array[index] = b;
        index++;
        return this;
    }

    public MessageArrayBuilder append(byte[] array) {
        for (byte b : array) {
            append(b);
        }
        return this;
    }

    public MessageArrayBuilder append(String string) {
        return append(string.getBytes(Charset.forName("GBK")));
    }
   
    public void addByte(int i){
        append(intToByte(i)[0]);
    }
   
    public void addDWORD(int i){
        append(intToDWORD(i));
    }
    public int addDWORDLength(int i){
        return intToDWORD(i).length;
    }
    public void addWORD(int i){
        append(intToWORD(i));
    }
    public void addBCD(String string){
        append(hexStringToByte(string));
    }
    public int addBCDLength(String string){
        return hexStringToByte(string).length;
    }
   
    public void append(int paramId, String string){
        append(paramId, string , true);
    }
    public void appendBCD(int paramId, String string){
        length++;
        addWORD(paramId);
        addByte(addBCDLength(string));
        addBCD(string);
    }
   
    public void append(int paramId, String string, boolean fillLength){
        length++;
        addWORD(paramId);
        if(StringUtils.isBlank(string)){
            if(fillLength){
                addByte(0);
            }
            return;
        }
        addByte(string.getBytes().length);
        append(string);
    }
    public void append(int paramId, int latlng){
        length++;
        addWORD(paramId);
        addByte(addDWORDLength(latlng));
        addDWORD(latlng);
    }
   
    public void insertFirst(byte b){
        byte[] array = getBytes();
        byte[] newArray = new byte[array.length + capacity];
        System.arraycopy(array, 0, newArray, 1, array.length);
        newArray[0] = b;
        this.array = newArray;
        index++;
    }

    public byte[] getBytes() {
        byte[] newArray = new byte[index];
        System.arraycopy(array, 0, newArray, 0, index);
        return newArray;
    }

    public int getLength() {
        return length;
    }
}

分享到:
评论

相关推荐

    扫描器篇(五)之scapy构造UDP数据包完成主机发现

    目标端口不可达的消息,通过该特征可以对主机进行判断是否在线 注意事项 如果目标主机端口不在线,或者在线且目标端口为开放状态,那么发送出去的UDP数据包不会收到任何回复 判断条件 以返回包中的ip部分proto...

    Block Builder是一个轻量级的,无依赖项JavaScript库,用于为Slack创建交互式消息,模式和主选项卡-JavaScript开发

    Block Builder是一个轻量级的,无依赖项JavaScript库,用于创建Slack的交互式消息,模式和主页选项卡,其构建器语法受SwiftUI的启发。...构造器接口可以与构造器接口一起使用,以实现最大的灵活性。 对所有人的支持

    C#本质论(第3版)

    5.7.5 使用this调用另一个构造器 5.8 静态成员 5.8.1 静态字段 5.8.2 静态方法 5.8.3 静态构造器 5.8.4 静态属性 5.8.5 静态类 5.9 扩展方法 5.10 封装数据 5.10.1 const 5.10.2 readonly 5.11 嵌套类 ...

    COM+事务处理

    要实现COM+事务处理的类则必须继承System.EnterpriseServices.ServicedComponent,这些类需要是公共的,并且需要提供一个公共的默认的构造器。其实Web Service就是继承ServicedComponent,所以Web Service也支持COM+...

    logstash-patterns:用logstash解析和构造日志消息的Grok模式

    使用解析和构造不同服务的日志消息的模式。 使用调试您的图案! 注意,可能会有细微的差异! 向该存储库发出拉取请求时,请不要忘了包含您的提交尝试解析的消息的示例!! 添加图案 通常在自己的文件中开发一个新...

    用Vue.extend构建消息提示组件的方法实例

    按照官方文档说法,他是一个类构造器,用来创建一个子类vue并返回构造函数,而Vue.component它的任务是将给定的构造函数与字符串ID相关联,以便Vue.js可以在模板中接收它。 了解了这点之后我们开始做我们的消息提示...

    Spring面试题[更多最新精品www.cx1314.cn]1

    1. 构造器注入 3. 接口注入 1. 提供了支持国际化的文本消息 2. 统一的资源文件读取方式 3. 已在监听器中注册的 bean 的事件 4.Annotat

    Spring面试专题及答案整理1

    1. 构造器注入 3. 接口注入 1. 提供了支持国际化的文本消息 2. 统一的资源文件读取方式 3. 已在监听器中注册的 bean 的事件 1. Applic

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    5.7.5 构造器链:使用this调用另一个构造器 168 5.8 静态成员 172 5.8.1 静态字段 172 5.8.2 静态方法 174 5.8.3 静态构造器 175 5.8.4 静态属性 176 5.8.5 静态类 177 5.9 扩展方法 ...

    咕泡学院_Tom_JavaVIP课程_Spring面试宝典1

    1.构造器注入 3.接口注入 1.提供了支持国际化的文本消息 2.统一的资源文件读取方式 3.已在监听器中注册的 bean 的事件 1.基于 XML 的配置 2

    基于多比特输出点函数混淆器的消息认证码

    为此,提出一种基于多比特输出点函数混淆器的消息认证方案,在此基础上,利用带多比特输出点函数混淆器和带密钥的Hash函数构造一个新的消息认证码方案。分析结果表明,该方案的安全性同时依赖于Hash函数和多比特输出点...

    谈谈JavaScript中function多重理解

    它可能是一个构造器(constructor),承担起对象模板的作用; 可能是对象的方法(method),负责向对象发送消息。还可能是函数,没错是函数,和对象没有任何关系独立存在的可以被调用的函数。 由于语言设计者的妥协...

    spring.net中文手册在线版

    4.3.3.详细讨论对象属性和构造器参数 4.3.3.1.设置空值 4.3.3.2.设置集合值 4.3.3.3.设置泛型集合的值 4.3.3.4.设置索引器属性 4.3.3.5.内联对象定义 4.3.3.6.idref节点 4.3.3.7.引用协作对象 4.3.3.8.value和ref...

    Android中Handler消息传递机制

    当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。 出于...

    基于多比特输出点函数混淆器的消息认证码 (2013年)

    为此,提出一种基于多比特输出点函数混淆器的消息认证方案,在此基础上,利用带多比特输出点函数混淆器和带密钥的Hash函数构造一个新的消息认证码方案。分析结果表明,该方案的安全性同时依赖于Hash函数和多比特输出...

    ubxtranslator:一个用于UBX消息的简单python解析器

    ubxtranslator概述该模块提供了一种简单的方法,可以以UBX格式解码来自uBlox GPS设备的消息。 就像我创建的高精度NEO-M8U模块一样, 该程序包没有依赖项!... 如果不是这样,您将需要自己构造消息和类,请参见示例以

    spring cloud 面试题专项

    Dependency Injection(DI) 方法使得构造器和JavaBean properties文件中的依赖关系一目了然。 与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和...

    物联网安全_实验9 信息保密性、完整性和不可抵赖性的综合应用.doc

    构造消息的会话密钥部分。 PGP接收方处理消息的过程为:(1)解密消息:PGP用消息的会话密钥部分中的KeyID作为索引,从私钥环中获取私钥;PGP提示输入口令短语,恢复私钥;PGP恢复会话密钥,并解密消息;(2)验证...

    Java框架面试题.docx

    Dependency Injection(DI) 方法使得构造器和JavaBean properties文件中的依赖关系一目了然。 与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和...

    ozzo-validation:惯用的Go(golang)验证包。 支持使用常规语言构造而不是容易出错的构造标记的可配置和可扩展验证规则(验证器)

    使用常规的编程构造而不是容易出错的构造标记来指定应如何验证数据。 可以验证不同类型的数据,例如结构,字符串,字节片,片,映射,数组。 只要它们实现Validatable接口,就可以验证自定义数据类型。 可以验证...

Global site tag (gtag.js) - Google Analytics