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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字节增强java_提高byte的效率

發布時間:2025/1/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字节增强java_提高byte的效率 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

帥子 閱讀(792) 評論(0) ?編輯 ?收藏 所屬分類: J2EE技術專區

在網絡編程中,我們經常要組建自己的網絡協議,通常我們把數據按照協議組成byte數組,通過byte數組實現客戶端與服務器端的通信,我們可能通過兩種方法來組這個byte數組:

1、是通過ByteArrayOutputStream:

ByteArrayOutputStream?baos=new?ByteArrayOutputStream();

baos.write(data.getBytes());

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

2、是通過ByteBuffer:

在使用ByteBuffer時,我們要使用一個小技巧:因為我們發送的數據長度是不固定的,所以我們不能給ByteBuffer分配固定的容量,如果分配固定的容易,一方面可能造成內存的浪費,另外一方面有可能我們寫的數據會超出ByteBuffer的容量。所以我們在申請ByteBuffer空間時,先計算其數據長度:

如果是byte,short,int,long等類型的數據我們都好計算;

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

例子:

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);//后續數據長度

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

//接下來往ByteBuffer填充數據

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

short?c=0X0416;

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

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

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

w_buff.put(len);//昵稱的長度

w_buff.put(bs);//昵稱

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

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

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();

我個人比較喜歡用第二種方法,因為它的效率比第一種要高出一到兩倍呢。

而且第二種方法可以不用自己去把short,int,long等類型的數據轉換成byte數組(這可是以麻煩的過程呀)。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。