`

消息构造器

    博客分类:
  • 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;
    }
}

分享到:
评论

相关推荐

    Health Level Seven(HL7)本土化应用研究

    1. **消息构造器/解析器的开发**:为了使HL7标准更好地适应中国医疗机构的实际需求,需要开发一套消息构造器/解析器工具,以支持HL7消息的生成和解析。 2. **数据映射与转换**:考虑到不同系统间的数据格式差异,...

    商业源码-编程源码-SOAP 2.0 SDK 配套源代码.zip

    5. **SOAP消息构造器**和**解析器**:帮助构建和解析SOAP消息的结构,确保符合SOAP规范。 6. **错误处理机制**:提供对SOAP错误的处理,包括标准错误和自定义错误。 源代码分析可以从以下几个方面进行: - **API...

    soap.rar最新jar包

    3. **SOAP消息构造器**:这些类帮助开发者构建符合SOAP规范的消息结构。 4. **SOAP解析器**:用于解析接收到的SOAP消息,提取所需的数据。 5. **XML序列化/反序列化工具**:如XMISerializer,将Java对象和XML数据...

    WSO2-ESB-Custom-Message-Builder

    WSO2 ESB允许通过各种协议和服务接口进行灵活的数据交换,而“定制消息构造器”是其核心功能之一。本文将深入探讨与"WSO2-ESB-Custom-Message-Builder"相关的知识点。 **1. WSO2 ESB的角色** WSO2 ESB作为一个服务...

    sip.rar_SIP java_sip_sip java

    在Java中,Java SIP API(javax.sip)为开发者提供了实现SIP协议所需的各种组件,包括消息构造器、对话管理、事件监听等。以下是一些关键的API类: - `SipFactory`:创建SIP组件,如消息工厂、URI工厂和会话工厂。 ...

    AXIS2

    4. **丰富的扩展性**:AXIS2提供了许多扩展点,如消息处理器、消息构造器、服务部署工厂等,允许开发者自定义行为以满足特定需求。 5. **数据绑定**:AXIS2集成了多种数据绑定技术,如ADB(AXIS Data Binding)、...

    ProtocolBuffer详细使用文档

    3. 通过消息类的内部类 `Builder` 类构造消息构造器。 4. 设置消息字段的值。 5. 创建消息类对象。 6. 应用序列化和反序列化操作,完成数据的发送或接收。 #### 三、Protocol Buffer 实例解析 假设我们需要定义一...

    pysipp-源码.rar

    5. **模块化设计**:源码可能包含了不同的模块,如消息构造器、解析器、会话管理等,展示了面向对象编程的应用。 6. **错误处理与测试**:源码中应有充分的错误处理机制,以及单元测试和集成测试,确保代码的稳定性...

    【最新】Linux平台: 基于osip eXosip库的服务器, 客户端源码, 可以编译通过,正常使用修改IP地址就可以了

    2. **SIP消息构造器**:用于创建新的SIP消息,并将其发送到网络。 3. **SIP事务管理**:处理SIP请求和响应的交互,确保正确执行事务流程。 **eXosip库** eXosip库是在osip基础上构建的,旨在简化SIP应用程序的开发...

    libosip2 5.0

    libosip2 包含了完整的头解析器、消息构造器以及用于网络传输的接口。 3. **版本 5.0 更新** 在 libosip2 5.0 版本中,开发者可以期待以下改进: - 性能优化:可能包含了内存管理、解析速度等方面的提升,以提高...

    MODBUS调试助手

    1. **消息构造器**:用户可以自定义MODBUS请求报文,包括选择功能码、寄存器地址、数据长度等参数,以匹配不同的MODBUS命令。 2. **帧发送与接收**:软件会将构造好的报文发送给从机,并显示接收到的响应,帮助分析...

    sip example

    2. SIP消息构造器:根据用户指令创建和发送SIP请求。 3. 事件处理器:处理接收到的SIP响应,更新用户界面状态。 而服务器端可能包括: 1. 接收器:监听网络上的SIP请求。 2. 路由器:根据请求的目的地址决定如何...

    wcfstorm.zip

    2. **消息构造器**:此功能允许用户创建、编辑和发送自定义的SOAP请求。这对于调试服务行为,尤其是处理复杂的数据结构和协议时非常有用。 3. **响应查看器**:接收到的SOAP响应将被清晰地呈现,方便开发者分析返回...

    QQ系统消息生成器

    1. **消息模拟**:生成器通过模拟QQ服务器的通信协议,构造出与原始系统消息格式一致的数据包。这涉及到对QQ消息协议的理解,包括消息类型、结构、编码等。 2. **消息定制**:用户可以自定义消息内容,这可能需要一...

    Laravel开发-former 强大的表单构造器

    在 Laravel 中,开发者可以利用其丰富的工具和库来提高开发效率,而 "Former" 正是这样一个专为 Laravel 设计的表单构造器。 Former 是一款强大的第三方库,它的主要目标是帮助 Laravel 开发者快速、方便地创建和...

    系统消息生成器

    然而,不法分子可能会利用此类工具来构造恶意的系统消息,误导用户点击包含钓鱼链接的通知,从而实施欺诈。 【QQ10000系统消息插件生成器.exe】这个文件名表明这可能是一个针对QQ应用的系统消息插件生成程序。QQ是...

    使用Laravel中的查询构造器实现增删改查功能

    在Laravel框架中,查询构造器是一个强大的工具,用于简化对数据库的CRUD(创建、读取、更新、删除)操作。本篇文章将详细介绍如何利用Laravel查询构造器实现增删改查功能。 首先,确保你的环境配置正确,包括PHP、...

    c - minus手工构造词法分析器

    4. 错误处理:当输入不符合预期时,词法分析器应能检测到错误并提供有用的错误消息。 5. 标记类型:每个标记都应有一个类型,例如`T_KEYWORD`,`T_IDENTIFIER`,`T_NUMBER`等,这有助于后续的语法分析。 6. 词法...

    activemq-cpp发送接收消息,消息过滤器

    5. **构造消息**:创建`Message`实例,可以是文本消息、二进制消息或其他类型,然后设置其内容和属性。 6. **发送消息**:通过`MessageProducer`将消息发送到指定的目的地。 接收消息的过程相对简单,主要涉及以下...

Global site tag (gtag.js) - Google Analytics