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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17


18

19

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





















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