Java 之NIO(四) - 编码解码问题

晒酷学院qq群:979438600

简介:

在新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对文件的读写进行编码转换功能。

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页