<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就進位。
    而現實生活中也有各種進位方式,比如常用的十進制,我們基本貨幣計算就是這種方式,因此還有八進位,十六進位等等,
    下面我把這些進位對應的英文也列出來,以為在編程的時候 常??吹降拿窍嚓P英文而非中文,理解這樣英文便于你的具體
    應用或者查看別人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)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲日韩在线观看| 免费专区丝袜脚调教视频| 免费国产成人高清视频网站| 亚洲第一区二区快射影院| 亚洲精品国产品国语在线| 国产免费内射又粗又爽密桃视频 | 亚洲色婷婷六月亚洲婷婷6月| 国产亚洲福利精品一区二区| 暖暖免费在线中文日本| 国产精品亚洲成在人线| 日韩内射激情视频在线播放免费 | 国产精品无码素人福利免费| 亚洲人成网站在线在线观看 | 亚洲人成影院在线观看| 羞羞视频免费网站在线看| 久久精品国产亚洲沈樵| 51视频精品全部免费最新| 亚洲avav天堂av在线网爱情| 日韩免费无砖专区2020狼| 麻豆91免费视频| 国产日韩亚洲大尺度高清| 免费成人激情视频| 亚洲日本在线电影| 亚洲一级特黄大片无码毛片 | 成人国产精品免费视频| 久久亚洲私人国产精品| 女人让男人免费桶爽30分钟| 国产成A人亚洲精V品无码性色| 一区二区免费视频| 亚洲 欧洲 视频 伦小说| 亚洲成AV人在线观看网址| 日韩免费的视频在线观看香蕉| 亚洲精品123区在线观看| 亚洲麻豆精品国偷自产在线91| 久久免费视频精品| 亚洲精品无码少妇30P| 亚洲乱码国产一区三区| 黄色片在线免费观看 | 中文字幕久精品免费视频| 又粗又硬又大又爽免费视频播放| 久久久WWW成人免费精品|