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

简介:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晒酷网-Ray

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值