Blogger Scott

          CharsetDecoder.decode()與Charset.decode()

              這是一個在處理大文本文件字符編碼轉(zhuǎn)換時碰到的問題,即使用CharsetDecoder.decode()方法解碼一個MappedByteBuffer對象時,如果這個MBB對象的長度設(shè)置的不好,可能會出現(xiàn)“java.nio.charset.MalformedInputException:Malformed input length is 2.”的錯誤。但是如果直接使用Charset.decode()方法,則不會出現(xiàn)這樣的錯誤。兩端代碼片段如下:

          1、使用CharsetDecoder.decode()方法:

           

           1.
           2   File infile = new File(inFilename);
           3   RandomAccessFile raf = new RandomAccessFile(infile, "r");
           4   MappedByteBuffer mbb = raf.getChannel().map(FileChannel.MapMode.READ_ONLY,0,6000);
           5   Charset inCharset = Charset.forName("GBK");
           6   Charset outCharset = Charset.forName("UTF-8");
           7   
           8   CharsetDecoder inDecoder = inCharset.newDecoder();
           9   CharsetEncoder outEncoder = outCharset.newEncoder();
          10
          11   CharBuffer cb = inDecoder.decode(mbb);
          12
          13   ByteBuffer outbb = outEncoder.encode(cb);
          14
          15   CharSequence str = new String(outbb.array());
          16   System.out.println("str is :"+str);
          17.
          18
          19


          2、直接使用Charset.decode()方法:

          .
             File infile 
          = new File(inFilename);
             RandomAccessFile raf 
          = new RandomAccessFile(infile, "r");
             MappedByteBuffer mbb 
          = raf.getChannel().map(FileChannel.MapMode.READ_ONLY,0,6000);
             Charset inCharset 
          = Charset.forName("GBK");
             Charset outCharset 
          = Charset.forName("UTF-8");
             
             
          //CharsetDecoder inDecoder = inCharset.newDecoder();
             
          //CharsetEncoder outEncoder = outCharset.newEncoder();

             CharBuffer cb 
          = inCharset.decode(mbb);

             ByteBuffer outbb 
          = outCharset.encode(cb);

             CharSequence str 
          = new String(outbb.array());
             System.out.println(
          "str is :"+str);
          .



           

          posted on 2009-06-04 23:15 江天部落格 閱讀(5028) 評論(0)  編輯  收藏 所屬分類: Android 、Java

          主站蜘蛛池模板: 砚山县| 庆元县| 尉氏县| 东阿县| 荣昌县| 团风县| 莒南县| 曲水县| 平山县| 穆棱市| 晋江市| 昆明市| 行唐县| 开平市| 商南县| 庆安县| 吉林市| 兴宁市| 梓潼县| 湖口县| 东台市| 海阳市| 五寨县| 花莲市| 尉犁县| 弥渡县| 安溪县| 陈巴尔虎旗| 马关县| 剑河县| 山阴县| 镇巴县| 托克托县| 黔西| 二连浩特市| 祁东县| 达尔| 九台市| 胶州市| 天等县| 旅游|