一般傳送的資料,肯定有訊息型別,訊息序列號,具體的自定義訊息內容;
則可以先定義乙個統一的格式:
prefix + packtype(1) + seq(4) +[userdata](標誌性字首+訊息型別+序列號+自定義資料)
針對上面根據每種訊息型別自定義的userdata,可以這樣定義格式:
[filedtype + filedlength+ filedvalue](字段型別標誌+字段長度+字段值)
直接看例子
packdata ()為打包訊息
public
class
utils
byte data = new
byte[max_packet_length];
int offset = 0;
// 打包資料頭部
//add prefix
data[offset++] = packet_prefix;
//add msgtype
data[offset++] = packtype;
//add seq
addint(data, offset, seq);
offset += int_length;
if (data.length < offset + userdata.length)
system.arraycopy(userdata, 0, data, offset, userdata.length);
offset += userdata.length;
byte result = new
byte[offset];
system.arraycopy(data, 0, result, 0, offset);
return result;
}public
static
intbytestoint(byte src, int offset)
int sendseq;
sendseq = src[offset++] & 0xff;
sendseq |= (src[offset++] << 8) & 0xff00;
sendseq |= (src[offset++] << 16) & 0xff0000;
sendseq |= (src[offset++] << 24) & 0xff000000;
return sendseq;
}public
static
byte inttobytes(int value)
public
static
void
addint(byte src, int offset, int value)
/*** [filedtype + filedlength+ filedvalue]
**@param src
*@param filedbytes
*/public
static
void
addfiledbytes(byte src, int offset, byte filedbytes, byte fieldtype)
下面為自定義的資料devicedata 如何和byte 相互轉化
public
class
devicedata
extends
baseuserdata
public
void
setdevid(string devid)
public string getservicename()
public
void
setservicename(string servicename)
public string getpkgname()
public
void
setpkgname(string pkgname)
public
intgetfunc()
public
void
setfunc(int func)
/*** [filedtype + filedlength+ filedvalue]
**@param device
*@return
*/public
static
byte packdevicedata(devicedata device)
try catch (unsupportedencodingexception e)
return
null;
}public
static devicedata parsedeviceuserdata(byte userdata)
int offset = 0;
while (offset + filed_header_length < userdata.length)
switch (datatype) catch (unsupportedencodingexception e)
device.setdevid(devid);
break;
case field_type_servicename:
string servicename = null;
try catch (unsupportedencodingexception e)
device.setservicename(servicename);
break;
case field_type_pkgname:
string pkgname = null;
try catch (unsupportedencodingexception e)
device.setpkgname(pkgname);
break;
case field_type_function:
int func = utils.bytestoint(userdata, offset);
if (func > 0)
break;
default:
}offset += len;
}return device;
}@override
public string tostring() ";
}}
json資料格式及其轉化方式
js裡面的資料格式 json object array var stu var stu1 console.log stu.name,stu1 後台返回的資料格式如果是物件,直接使用,如果是json,字串格式 var stu2 json物件轉化為字串型別的json var m json.stringi...
theme自定義格式
在androidmanifest.xml檔案中,可以對每乙個activity設定android theme theme的設定 可以設定為系統自帶的格式,也可以自定義格式。a 系統自帶格式 android style theme.black 背景黑色 有標題 非全屏 android style the...
VB Format自定義格式
下面 標識了一些可用來建立使用者自定義數值格式的字元 字元 說明 無 顯示沒有格式的數值。0 數字佔位符。顯示一位數字或是零。如果表示式在格式字串中 0 的位置上有一位數字存在,那麼就顯示出來 否則,就以零顯示。如果數值的位數少於格式表示式中零的位數 無論是小數點的左方或右方 那麼就把前面或後面的零...