各位大神好!
刚刚遇到这样一个需求:
客户端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的方法,我就懒得贴了,累