简介:
在新IO中为了保证程序适应各种不同的编码,提供了编码器和解码器,通过解码器可以方便的读取各个平台上不同编码的数据,之后再通过编码器将程序以正确的编码进行输出。
在java的新IO中提供了Charset类来处理编码问题,该类还包含了创建编码器(CharsetEncoder) 和 创建解码器(CharsetDecoder)操作。
Charset类的常用方法如下:
public static SortedMap<String,Charset> availableCharsets() 获取一个排序的Map,包含标准的Charset名字,及Charset对象
public static Charset forName(String charsetName) 通过charset名字获取Charset对象
public abstract CharsetEncoder newEncoder() 对指定的charset创建编码器
public abstract CharsetDecoder newDecoder() 对指定的charset创建解码器
CharsetEncoder类常用方法:
public final ByteBuffer encode(CharBuffer cb) 将单个输入字符进行编码
public final CharBuffer decode(ByteBuffer bb) 将编码后的内容进行解码
代码示例:
package com.ray.nio.demo;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.SortedMap;
/**
* 通过以下代码演示使用SortedMap<String, Charset>获取系统所有支持的字符集,其中key保存的是每种编码的别名,value表示Charset实例
* @author xuleilei
*
*/
public class CharsetSortedMap {
public static void main(String[] args) {
SortedMap<String, Charset> charsetMap = Charset.availableCharsets();
Iterator<Entry<String, Charset>> charsetIter = charsetMap.entrySet().iterator();
while(charsetIter.hasNext()){
Entry<String, Charset> entry = charsetIter.next();
System.out.println(entry.getKey() + "-> " + entry.getValue().name());
}
}
}
如下代码使用CharsetEncoder、CharsetDecoder进行编码、解码操作:
package com.ray.nio.demo;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class CharsetEnDecoder {
public static void main(String[] args) throws CharacterCodingException {
Charset iso = Charset.forName("ISO-8859-1");
CharsetEncoder isoEncoder = iso.newEncoder();
CharsetDecoder isoDecoder = iso.newDecoder();
CharBuffer chars = CharBuffer.wrap("测试一下编码解码器功能!");
ByteBuffer bytes = isoEncoder.encode(chars);
System.out.println(isoDecoder.decode(bytes));
}
}
通常使用CharsetEncoder、CharsetDecoder对文件的读写进行编码转换功能。