您的位置:首页 > 编程语言 > Java开发

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

2016-04-06 18:30 791 查看
简介:

在新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对文件的读写进行编码转换功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: