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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值