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

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

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

    linugb118--java space

    Java

    byte in java


    最近因為解析socket 于是就遇到二進制這些東西,在學校沒學好而且以前不是很理解,所有重新開始溫故了一些基本概念,
    首先是進制的概念,所謂的進制就是數學計算的具體多少而進位的一種算法。比如二進制,就只有0和1 他們基本是到2就進位。
    而現實生活中也有各種進位方式,比如常用的十進制,我們基本貨幣計算就是這種方式,因此還有八進位,十六進位等等,
    下面我把這些進位對應的英文也列出來,以為在編程的時候 常常看到的命名是相關英文而非中文,理解這樣英文便于你的具體
    應用或者查看別人API。

    十進制數(Decimal)
    二進制數(Binary)
    七進制數(septenary)
    八進制數(Octal)
    十六進制數(Hex)
    六十進位制數(Sixty binary)

    其實本身這些進制都是機器可讀的語言,對應同樣的東西 他們只是表達的方式不一樣,表達的都是同一個東西,
    那么本身進制直接可能通過操作相互轉化,這個轉化就比較枯燥,一般語言都提供API來封裝了這個轉化過程。

    進制數我剛才說了,我理解為機器可讀的標識,那么對應人的話,一般我們看到的都是圖形化的東西,因此最早老美提出了
    ASCII,因為是老美提出來的,所以他只講他們的語言的基本元素A B C D...
    ASCII里面分顯示字符和控制字符,一般控制字符不能顯示在頁面。
    具體可以參考
    http://zh.wikipedia.org/zh/ASCII
    隨著全球化的進程,ASCII太局限了,因此Unicode更為普及。

    理解了基本原理: 我們調用apache Codec 的api 來看看

    org.apache.commons.codec.binary
    Class BinaryCodec:
    Translates between byte arrays and strings of "0"s and "1"s.

    例子
      String s ="00011111";
      BinaryCodec bc = new BinaryCodec();
      byte[] b = bc.toByteArray(s);   //b 調試結果為 [31] 其實就是acii 上面描述的十進制表示
      String t = new String(b);       //t 不能看到  因為這是控制字符
      System.out.println(t);

    如果
      String s ="00100001";
      BinaryCodec bc = new BinaryCodec();
      byte[] b = bc.toByteArray(s);   //b 調試結果為 [33] 其實就是acii 上面描述的十進制表示
      String t = new String(b);       //t 能看到 是字符!
      System.out.println(t);
      
    而這個s 必須是1 0表示的二進制。toByteArray這個應該表示將二進制顯示的字符串轉化為真正的顯示意義上的二進制。

      String s ="00100001";
      BinaryCodec bc = new BinaryCodec();
      byte[] b = bc.toByteArray(s); //b=[33]
      char[] d = bc.toAsciiChars(b); //d= [0, 0, 1, 0, 0, 0, 0, 1]
      String str = bc.toAsciiString(b);//str = 00100001
      byte[] e = bc.toAsciiBytes(b);  //e = [48, 48, 49, 48, 48, 48, 48, 49]
      

      BinaryCodec bc = new BinaryCodec();
      char[] c = {'0','0','1','0','0','0','0','1'};
      byte[] b = bc.fromAscii(c);  //[33]
      如果
      char[] c = {'0','0','1','J','0','0','0','1'}; //表示二進制
      還是//[33]   這說明除了1所有的char 在該API都認為是0,來處理二進制
      如果是
      char[] c = {'0','0','1','J','0','0','0'}; //七位
      那么b 就為空[]
      
      如果是九位
      char[] c = {'0','0','1','J','0','0','0','0'}; //九位
      如果最后一位為1 那么結果 b=[65]
      如果為非1 比如0 或者其他char 那么結果b=[64]
      
    方法
    static byte[] fromAscii(byte[] ascii)  和上面的
    static byte[] fromAscii(char[] ascii) 一樣

    比如
    byte[] i = {'0','0','1','J','0','0','0','0','l'};
    byte[] b = bc.fromAscii(i); //b的結果仍然是b=[64]
    但是 在調試看到i 顯示為 i=[48, 48, 49, 74, 48, 48, 48, 48, 108]

    ////////////////解碼
    byte[] decode(byte[] ascii) 將1,0 表示的byte數組解碼為相應的byte
    比如:
      BinaryCodec bc = new BinaryCodec();
      byte[] i = {'0','0','1','J','0','0','0','0','l'}; //i=[48, 48, 49, 74, 48, 48, 48, 48, 108]
      byte[] b = bc.decode(i); //b=[64]

    再比如:Object decode(Object ascii) :

      String s ="00011111";
      BinaryCodec bc = new BinaryCodec();
      try {
       Object t =bc.decode(s);  //t=[31]
       System.out.println(t);
      } catch (DecoderException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }

    /////////////////編碼
    將byte轉化為1,0 表示的byte數組
    byte[] encode(byte[] raw)
     Object encode(Object raw)
     例如:
      String s ="00011111";
      BinaryCodec bc = new BinaryCodec();

      try {
       Object t =bc.encode(s);
       System.out.println(t);
      } catch (EncoderException e) {
       // TODO Auto-generated catch block
       e.printStackTrace(); //會拋出e:org.apache.commons.codec.EncoderException: argument not a byte array
      
      }
     
     如果
      byte[] i = {'!'};
      BinaryCodec bc = new BinaryCodec();

      Object t =bc.encode(i); //t=[48, 48, 49, 48, 48, 48, 48, 49]
      System.out.println(t);

     

    posted on 2010-12-17 17:23 linugb118 閱讀(2528) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人人免费夜夜视频观看| 一二三四免费观看在线电影| 免费国产小视频在线观看| 亚洲一级特黄特黄的大片| 在线天堂免费观看.WWW| 亚洲国产精品综合福利专区| 精品久久8x国产免费观看| 亚洲人成网站在线观看播放青青| 亚洲VA中文字幕无码毛片| a级成人免费毛片完整版| 青青草免费在线视频| 国产.亚洲.欧洲在线| 永久免费无码网站在线观看| 国产精品亚洲片在线观看不卡 | 久久久久亚洲av毛片大| 亚洲视频在线观看不卡| 亚洲精品在线免费观看视频| 亚洲av成人综合网| 在线免费观看韩国a视频| 菠萝菠萝蜜在线免费视频| 国产1000部成人免费视频| 亚洲熟女综合一区二区三区| 国产又黄又爽又刺激的免费网址 | 久久精品一本到99热免费| wwwxxx亚洲| 亚洲精品视频免费在线观看| 亚洲AV永久无码精品成人| 免费福利网站在线观看| 真人无码作爱免费视频| 成人最新午夜免费视频| 亚洲熟妇色自偷自拍另类| 免费播放在线日本感人片| 亚洲一级Av无码毛片久久精品| 午夜在线a亚洲v天堂网2019| 免费少妇a级毛片| 久久精品乱子伦免费| 亚洲色无码专区一区| 91免费精品国自产拍在线不卡| 777亚洲精品乱码久久久久久 | 国产免费MV大全视频网站| 四虎AV永久在线精品免费观看|