CharsetDecoder.decode()與Charset.decode()

CharsetDecoder.decode()與Charset.decode()

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

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);
發佈了39 篇原創文章 · 獲贊 55 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章