CharsetDecoder.decode()与Charset.decode()
来源:互联网 发布:java项目网站 编辑:程序博客网 时间:2024/06/09 03:46
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 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);
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
- CharsetDecoder.decode()与Charset.decode()
- decode
- decode
- decode
- DECODE
- decode
- DECODE
- decode
- decode
- case when 与decode
- 二维码_encode与decode
- getResource()与decode()
- 【SQL】CASE与DECODE
- URLDecoder.decode(String str,String charSet)的大致实现原理
- 利用java.nio.charset.CharsetDecoder自动识别字符集
- 利用java.nio.charset.CharsetDecoder自动识别字符集
- 利用java.nio.charset.CharsetDecoder自动识别字符集
- 利用java.nio.charset.CharsetDecoder自动识别字符集
- 使用日期、时间与定时器
- ORACLE PL/SQL编程之八:把触发器说透(写的太长了,建议没事的时候看,想快速查怎么用触发器的不要看)
- Redis安装部署(Linux)
- 他山之石-刷新PHP缓冲区为你的站点加速
- 5566
- CharsetDecoder.decode()与Charset.decode()
- hadoop 10篇博客
- 我不强求你做快乐的孩子——心理咨询师父亲给女儿的公开信
- bzoj1305: [CQOI2009]dance跳舞
- manjao linux下玩转arduino
- 原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是 <xsd:schema>
- Oracle性能优化之COUNT
- sqlite3数据库基本使用
- getFragmentManager和getSupportFragmentManager的区别是?