<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    內蒙古java團隊

    j2se,j2ee開發組
    posts - 139, comments - 212, trackbacks - 0, articles - 65
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    提高byte的效率

    Posted on 2007-12-20 11:40 帥子 閱讀(895) 評論(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數組(這可是以麻煩的過程呀)。
    主站蜘蛛池模板: 亚洲黄片手机免费观看| 天天综合亚洲色在线精品| 最近免费中文字幕中文高清| 伊在人亚洲香蕉精品区麻豆| 亚洲爆乳AAA无码专区| 好大好深好猛好爽视频免费| 亚洲日韩精品国产一区二区三区 | 亚洲中文字幕无码爆乳AV| 色多多www视频在线观看免费| 免费人成视频在线观看视频| 成年免费大片黄在线观看com| 亚洲女人被黑人巨大进入| 岛国岛国免费V片在线观看| 亚洲老妈激情一区二区三区| 麻豆精品成人免费国产片| 久久亚洲精精品中文字幕| 国内精品乱码卡1卡2卡3免费| 亚洲欧洲无卡二区视頻| 免费夜色污私人影院在线观看| xvideos永久免费入口| 亚洲AV无码成人专区片在线观看 | 四虎国产精品免费久久| 亚洲欧美国产国产一区二区三区| 免费看的黄色大片| 一区二区三区免费电影| 久久亚洲AV午夜福利精品一区| 最近中文字幕免费2019| 亚洲国产区男人本色| 亚洲一级片免费看| 亚洲免费视频网站| 亚洲精品GV天堂无码男同| 亚洲午夜福利精品无码| 日本免费一区二区三区四区五六区| 久久久国产精品亚洲一区| 成人免费无码大片A毛片抽搐色欲| 免费看一级高潮毛片| 亚洲天堂视频在线观看| 免费无码又爽又刺激高潮 | 日本免费一区二区三区最新vr| 精品一区二区三区免费观看| 亚洲精品网站在线观看你懂的|