当前位置: 代码迷 >> J2SE >> 如此需求该怎么设计实体类
  详细解决方案

如此需求该怎么设计实体类

热度:85   发布时间:2016-04-23 20:29:13.0
如此需求该如何设计实体类?
各位大神好!
  刚刚遇到这样一个需求:
  客户端socket向服务端socket发送的数据格式如下:
  
Application header, Version,...(后面还有其他的,不一一列举了)

然后Application header的格式如下:

意思就是Application header的长度为4个byte,第一个byte的第0位存储的是ACP protocol,依此类推。还有一些表格定义了各项的取值范围,例如ACP protocol的取值为0或1,Message Type的取值范围为0到31。

Version也有格式的相关规定,和Application header类似。

那么我的问题是,如何设计实体类才能灵活地根据各属性得到所需要的格式的数据?
Application header这个实体得到的是“010111110101101...”这样的字符串吗?
那客户端socket向服务端socket发送的数据是Application header和Version的二进制字符串拼接起来的字符串吗?

由于客户就只给了这些书面资料,并没有作过多说明,所以,拜托各位出出主意,谢谢了!

我不知道该如何设计实体类,以下只是一个大概
public class ApplicationHeader {
private byte ACPProtocol;
private byte privateFlag;
private byte testFlag;
private byte messageType;
private byte versionFlag;
private byte version;
private byte messageControlFlag;
private int messageLength;

public ApplicationHeader() {

}

public String getApplicationHeader(){
return "";
}
}

------解决方案--------------------
假设读取和写入的都是字节数组,我就拿前第一个字节的四个属性为例写下读取和写入的代码段,后面的楼主自己琢磨下,应该没啥难度。

public class ApplicationHeader {
    private int  _apc_protocol;
    private int  _private_Flag;
    private int  _test_Flag;
    private int  _message_Type;

    public void read(byte[] bytes){
            _apc_protocol = bytes[0] & 1;
            _private_Flag = (bytes[0] & 2) >> 1;
            _test_Flag = (bytes[0] & 4) >> 2;
            _message_Type = bytes[0] >> 3;
    }

    public byte[] write(){
        byte[] bytes = new byte[4];
        int tmp = (_apc_protocol & 1) 
------解决方案--------------------
 ((_private_Flag & 1) << 1) 
------解决方案--------------------
 ((_test_Flag & 1) << 2) 
------解决方案--------------------
 _message_Type << 3;
        bytes[0] = (byte)tmp;
        
        return bytes;
    }
}

什么封装属性字段的get set的方法,我就懒得贴了,累
  相关解决方案