日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

字节增强java_提高byte的效率

發(fā)布時(shí)間:2025/1/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字节增强java_提高byte的效率 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

帥子 閱讀(792) 評(píng)論(0) ?編輯 ?收藏 所屬分類(lèi): J2EE技術(shù)專(zhuān)區(qū)

在網(wǎng)絡(luò)編程中,我們經(jīng)常要組建自己的網(wǎng)絡(luò)協(xié)議,通常我們把數(shù)據(jù)按照協(xié)議組成byte數(shù)組,通過(guò)byte數(shù)組實(shí)現(xiàn)客戶端與服務(wù)器端的通信,我們可能通過(guò)兩種方法來(lái)組這個(gè)byte數(shù)組:

1、是通過(guò)ByteArrayOutputStream:

ByteArrayOutputStream?baos=new?ByteArrayOutputStream();

baos.write(data.getBytes());

byte?[]?ret?=?baos.toByteArray();

2、是通過(guò)ByteBuffer:

在使用ByteBuffer時(shí),我們要使用一個(gè)小技巧:因?yàn)槲覀儼l(fā)送的數(shù)據(jù)長(zhǎng)度是不固定的,所以我們不能給ByteBuffer分配固定的容量,如果分配固定的容易,一方面可能造成內(nèi)存的浪費(fèi),另外一方面有可能我們寫(xiě)的數(shù)據(jù)會(huì)超出ByteBuffer的容量。所以我們?cè)谏暾?qǐng)ByteBuffer空間時(shí),先計(jì)算其數(shù)據(jù)長(zhǎng)度:

如果是byte,short,int,long等類(lèi)型的數(shù)據(jù)我們都好計(jì)算;

如果是String的話,我們先獲取其getBytes(),然后計(jì)算其長(zhǎng)度。

例子:

byte?[]?bs=null;

byte?len?=?0;

try?{

bs="直播員".getBytes("GBK");

len?=?(byte)?bs.length;

}?catch?(UnsupportedEncodingException?e)?{

e.printStackTrace();

return?result;

}

short?datalen=(short)?(2+4+4+1+bs.length+4+4+4+1+1);//后續(xù)數(shù)據(jù)長(zhǎng)度

ByteBuffer?w_buff?=?ByteBuffer.allocate(datalen+2);//申請(qǐng)ByteBuffer

//接下來(lái)往ByteBuffer填充數(shù)據(jù)

w_buff.putShort(Short.reverseBytes(datalen));

short?c=0X0416;

w_buff.putShort(Short.reverseBytes(c));//登錄命令號(hào)

w_buff.putInt(Integer.reverseBytes(111));

w_buff.putInt(Integer.reverseBytes(2222));

w_buff.put(len);//昵稱(chēng)的長(zhǎng)度

w_buff.put(bs);//昵稱(chēng)

w_buff.putInt(Integer.reverseBytes(1));//等級(jí)

w_buff.putInt(Integer.reverseBytes(1));//用戶權(quán)限

w_buff.putInt(Integer.reverseBytes(1));//用戶頭像

byte?sex=0;

w_buff.put(sex);//用戶性別

byte?age=20;

w_buff.put(age);//用戶年齡

byte?[]?ret=w_buff.array();

我個(gè)人比較喜歡用第二種方法,因?yàn)樗男时鹊谝环N要高出一到兩倍呢。

而且第二種方法可以不用自己去把short,int,long等類(lèi)型的數(shù)據(jù)轉(zhuǎn)換成byte數(shù)組(這可是以麻煩的過(guò)程呀)。

總結(jié)

以上是生活随笔為你收集整理的字节增强java_提高byte的效率的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。