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

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

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

    飛翔的起點

    從這里出發

    導航

    <2009年9月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統計

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    2009年9月18日 #

    Queue

    public class QuenDemo {
      public static void main(String[] args){
       //public class Queue extends Collection
       Queue<Integer> queue=new LinkedList<Integer>();
       Random  rand = new Random(47);
       for(int i=0;i<10;i++){
        queue.offer(rand.nextInt(i+10));
       }
       System.out.println("1111"+queue.toString());
       printQ(queue);
       //public class LinkedList extends AbstractSequentialList implements List,Queue,Cloneable,Serializable
       Queue<Character> qc=new LinkedList<Character>();
       for(char c:"guoxzh".toCharArray()){
        qc.offer(c);
        System.out.println("qc=="+qc.toString());
       }
        printQ(qc);
      }
      
      public static void printQ(Queue queue){
       while(queue.peek()!=null){
        //peek和element都是在不移除的情況下返回對頭,但是peek在隊列為空的情況下返回null,element方法會拋出NoSuchElementException異常
        System.out.println(queue.remove());
        //remove和poll方法都是在移除并返回對頭,但是poll在為空時返回null,而remove會拋出NoSucheElementException異常
        System.out.println("2222"+queue.toString());
       }
      }
    }

    posted @ 2009-10-18 18:29 forgood 閱讀(217) | 評論 (0)編輯 收藏

    java中的編碼方法

    package src;

    import java.io.UnsupportedEncodingException;

    public class ChangeCharset {
      /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁塊 */
      public static final String US_ASCII = "US-ASCII";

      /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
      public static final String ISO_8859_1 = "ISO-8859-1";

      /** 8 位 UCS 轉換格式 */
      public static final String UTF_8 = "UTF-8";

      /** 16 位 UCS 轉換格式,Big Endian(最低地址存放高位字節)字節順序 */
      public static final String UTF_16BE = "UTF-16BE";

      /** 16 位 UCS 轉換格式,Little-endian(最高地址存放低位字節)字節順序 */
      public static final String UTF_16LE = "UTF-16LE";

      /** 16 位 UCS 轉換格式,字節順序由可選的字節順序標記來標識 */
      public static final String UTF_16 = "UTF-16";

      /** 中文超大字符集 */
      public static final String GBK = "GBK";

      /**
       * 將字符編碼轉換成US-ASCII碼
       */
      public String toASCII(String str) throws UnsupportedEncodingException{
       return this.changeCharset(str, US_ASCII);
      }
      /**
       * 將字符編碼轉換成ISO-8859-1碼
       */
      public String toISO_8859_1(String str) throws UnsupportedEncodingException{
       return this.changeCharset(str, ISO_8859_1);
      }
      /**
       * 將字符編碼轉換成UTF-8碼
       */
      public String toUTF_8(String str) throws UnsupportedEncodingException{
       return this.changeCharset(str, UTF_8);
      }
      /**
       * 將字符編碼轉換成UTF-16BE碼
       */
      public String toUTF_16BE(String str) throws UnsupportedEncodingException{
       return this.changeCharset(str, UTF_16BE);
      }
      /**
       * 將字符編碼轉換成UTF-16LE碼
       */
      public String toUTF_16LE(String str) throws UnsupportedEncodingException{
       return this.changeCharset(str, UTF_16LE);
      }
      /**
       * 將字符編碼轉換成UTF-16碼
       */
      public String toUTF_16(String str) throws UnsupportedEncodingException{
       return this.changeCharset(str, UTF_16);
      }
      /**
       * 將字符編碼轉換成GBK碼
       */
      public String toGBK(String str) throws UnsupportedEncodingException{
       return this.changeCharset(str, GBK);
      }
     
      /**
       * 字符串編碼轉換的實現方法
       * @param str  待轉換編碼的字符串
       * @param newCharset 目標編碼
       * @return
       * @throws UnsupportedEncodingException
       */
      public String changeCharset(String str, String newCharset)
        throws UnsupportedEncodingException {
       if (str != null) {
        //用默認字符編碼解碼字符串。
        byte[] bs = str.getBytes();
        //用新的字符編碼生成字符串
        return new String(bs, newCharset);
       }
       return null;
      }
      /**
       * 字符串編碼轉換的實現方法
       * @param str  待轉換編碼的字符串
       * @param oldCharset 原編碼
       * @param newCharset 目標編碼
       * @return
       * @throws UnsupportedEncodingException
       */
      public String changeCharset(String str, String oldCharset, String newCharset)
        throws UnsupportedEncodingException {
       if (str != null) {
        //用舊的字符編碼解碼字符串。解碼可能會出現異常。
        byte[] bs = str.getBytes(oldCharset);
        //用新的字符編碼生成字符串
        return new String(bs, newCharset);
       }
       return null;
      }

      public static void main(String[] args) throws UnsupportedEncodingException {
       ChangeCharset test = new ChangeCharset();
       String str = "This is a 中文的 String!";
       System.out.println("str: " + str);
       String gbk = test.toGBK(str);
       System.out.println("轉換成GBK碼: " + gbk);
       System.out.println();
       String ascii = test.toASCII(str);
       System.out.println("轉換成US-ASCII碼: " + ascii);
       gbk = test.changeCharset(ascii,ChangeCharset.US_ASCII, ChangeCharset.GBK);
       System.out.println("再把ASCII碼的字符串轉換成GBK碼: " + gbk);
       System.out.println();
       String iso88591 = test.toISO_8859_1(str);
       System.out.println("轉換成ISO-8859-1碼: " + iso88591);
       gbk = test.changeCharset(iso88591,ChangeCharset.ISO_8859_1, ChangeCharset.GBK);
       System.out.println("再把ISO-8859-1碼的字符串轉換成GBK碼: " + gbk);
       System.out.println();
       String utf8 = test.toUTF_8(str);
       System.out.println("轉換成UTF-8碼: " + utf8);
       gbk = test.changeCharset(utf8,ChangeCharset.UTF_8, ChangeCharset.GBK);
       System.out.println("再把UTF-8碼的字符串轉換成GBK碼: " + gbk);
       System.out.println();
       String utf16be = test.toUTF_16BE(str);
       System.out.println("轉換成UTF-16BE碼:" + utf16be);
       gbk = test.changeCharset(utf16be,ChangeCharset.UTF_16BE, ChangeCharset.GBK);
       System.out.println("再把UTF-16BE碼的字符串轉換成GBK碼: " + gbk);
      }
    }

    posted @ 2009-09-23 14:25 forgood 閱讀(304) | 評論 (0)編輯 收藏

    byte數組和String之間的轉化

    JAVA里面關于byte數組和String之間的轉換問題

    把byte轉化成string,必須經過編碼

    例如下面一個例子:

    import java.io.UnsupportedEncodingException;

    public class test{
     public static void main(String g[]) {
      String s = "12345abcd";
      byte b[] = s.getBytes();
      String t = b.toString();

      System.out.println(t);

     }
    }
    輸出字符串的結果和字符串s不一樣了.

    經過以下方式轉碼就可以正確轉換了:

    public class test{
     public static void main(String g[]) {
      String s = "12345abcd";
      byte b[] = s.getBytes();
      try {
       String t = new String(b);
       System.out.print(t);
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
    }

    引用:
    String   str   =   "String"; 
              byte[]   byte1   =   str.getBytes(); 
              String   str1   =   new   String(byte1); 
              byte[]   byte2   =   str1.getBytes(); 
              String   str2   =   new   String(byte2); 
              System.out.println("str<<<"   +   str); 
              System.out.println("byte1<<<"   +   byte1); 
              System.out.println("str1<<<"   +   str1); 
              System.out.println("byte2<<<"   +   byte2); 
              System.out.println("str2<<<"   +   str2); 
      ------------------------------------- 
      輸出結果 
      str<<<String 
      byte1<<<[B@192d342 
      str1<<<String 
      byte2<<<[B@6b97fd 
      str2<<<String 
      
      想請教為什么兩個byte輸出的不一樣呢? 
     

    String   str   =   "String"; 
              byte[]   byte1   =   str.getBytes(); 
              String   str1   =   new   String(byte1); 
              byte[]   byte2   =   str1.getBytes(); 
      ---------- 
      注意byte1是str得到的byte數組,而byte2是另一個字符串str1得到的數組 
      他們本身也是兩個對象  
       
      直接打印實際上調用的是toString()方法,而toString()的默認實現是打印對象類型+hashCode()  
      [B表示byte數組  @表示之后的是地址  后面跟著的是hashCode,其實就是其虛擬機地址  
      

    posted @ 2009-09-23 14:19 forgood 閱讀(3080) | 評論 (0)編輯 收藏

    jvm的內存模型

    從大的方面來講,JVM的內存模型分為兩大塊:

     

    永久區內存( Permanent space)和堆內存(heap space)。

     

    棧內存(stack space)一般都不歸在JVM內存模型中,因為棧內存屬于線程級別。

    每個線程都有個獨立的棧內存空間。

     

    Permanent space里存放加載的Class類級對象如class本身,methodfield等等。

    heap space主要存放對象實例和數組。

    heap spaceOld GenerationNewGeneration組成,OldGeneration存放生命周期長久的實例對象,而新的對象實例一般放在NewGeneration

    New Generation還可以再分為Eden(圣經中的伊甸園)、和Survivor區,新的對象實例總是首先放在Eden區,Survivor區作為Eden區和Old區的緩沖,可以向Old區轉移活動的對象實例。

     

    一般,我們常見的OOMout of memory)內存溢出異常,就是堆內存空間不足以存放新對象實例時導致。

     

    永久區內存溢出相對少見,一般是由于需要加載海量的Class數據,超過了非堆內存的容量導致。通常出現在Web應用剛剛啟動時,因此Web應用推薦使用預加載機制,方便在部署時就發現并解決該問題。

     

    棧內存也會溢出,但是更加少見。

     

    堆內存優化:

    調整JVM啟動參數-Xms  -Xmx   -XX:newSize -XX:MaxNewSize,如調整初始堆內存和最大對內存 -Xms256M -Xmx512M。 或者調整初始New Generation的初始內存和最大內存-XX:newSize=128M -XX:MaxNewSize=128M

     

    永久區內存優化:

    調整PermSize參數   如  -XX:PermSize=256M-XX:MaxPermSize=512M

     

    棧內存優化:

    調整每個線程的棧內存容量  如  -Xss2048K

     

     

    最終,一個運行中的JVM所占的內存堆內存  +  永久區內存  +  所有線程所占的棧內存總和 

    posted @ 2009-09-18 09:12 forgood 閱讀(302) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 国产v亚洲v天堂无码网站| 免费一级国产生活片| 麻豆亚洲AV永久无码精品久久| 成年免费a级毛片| 免费a级毛片在线观看| 最新亚洲人成无码网站| 在线看片无码永久免费aⅴ| 亚洲日韩精品无码AV海量| 18禁成年无码免费网站无遮挡| 国产成人精品日本亚洲18图| 国产va免费精品观看精品| 久久亚洲国产最新网站| 永久黄网站色视频免费| 青青视频免费在线| 亚洲熟妇无码另类久久久| 怡红院免费的全部视频| 少妇中文字幕乱码亚洲影视| 免费观看无遮挡www的小视频| 亚洲不卡中文字幕| 国产在线观看免费完整版中文版 | ww亚洲ww在线观看国产| 永久久久免费浮力影院| 羞羞视频免费网站入口| 久久久久久a亚洲欧洲aⅴ| 免费无码又爽又刺激高潮视频 | 亚洲欧洲美洲无码精品VA| 2021国内精品久久久久精免费| 亚洲一区在线免费观看| 国产一区二区三区在线免费观看 | 国产午夜无码精品免费看动漫| 久久亚洲sm情趣捆绑调教| 国产精品美女午夜爽爽爽免费| 亚洲AV色欲色欲WWW| 亚洲人成影院在线无码按摩店| 97在线视频免费| 亚洲国产成人久久综合| 国产亚洲一区二区精品| 色se01短视频永久免费| 激情吃奶吻胸免费视频xxxx| 亚洲∧v久久久无码精品| 永久免费av无码网站大全|