zoukankan      html  css  js  c++  java
  • 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);
    .

  • 相关阅读:
    百度地图中循环输出坐标点信息是重复的问题解决方法
    质问微软 WP8.1开发HTTPS 真费劲
    WebService 页面重定向错误
    Oracle 错误 maximum number of processes(150) exceeded 解决办法
    spring quartz定时任务 配置
    centos 7安装完后出现please make your choice from '1' to e
    centos单机安装Hadoop2.6
    centos 关闭防火墙
    CentOS 7 系统下安装gnome图形界面
    CentOS 7 ifconfig: command not found
  • 原文地址:https://www.cnblogs.com/hyp5490-/p/5220349.html
Copyright © 2011-2022 走看看