<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 閱讀(2527) 評論(0)  編輯  收藏


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


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久91亚洲精品中文字幕| 理论片在线观看免费| 巨胸喷奶水www永久免费| 亚洲?v无码国产在丝袜线观看 | 浮力影院第一页小视频国产在线观看免费 | 久久久久免费精品国产| 亚洲av无码一区二区三区网站| 国产综合免费精品久久久| 国产亚洲AV夜间福利香蕉149| 国产福利免费视频| 亚洲国产精品一区二区第一页| 国产成人一区二区三区视频免费| 亚洲国产精品一区| 日本精品人妻无码免费大全| 日本免费在线中文字幕| 亚洲s码欧洲m码吹潮| 69成人免费视频无码专区| 亚洲欧美不卡高清在线| 免费看片A级毛片免费看| 国产亚洲蜜芽精品久久| 亚洲乱亚洲乱少妇无码| 3344在线看片免费| 亚洲乱码一区av春药高潮| 青草草在线视频永久免费| 久久精品成人免费国产片小草| 亚洲日本va午夜中文字幕一区| 免费精品国偷自产在线在线| 亚洲av永久无码精品秋霞电影秋| 亚洲无码黄色网址| 在线免费观看国产| 久久亚洲中文字幕无码| 亚洲线精品一区二区三区 | 久久这里只精品热免费99| 亚洲中文字幕久久精品无码2021| 免费看少妇作爱视频| 中文字幕日本人妻久久久免费| 亚洲一级高清在线中文字幕| 免费大学生国产在线观看p| 日本黄色动图免费在线观看| 亚洲精品自偷自拍无码| 亚洲免费人成在线视频观看|