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对文件的读写进行编码转换功能。
在新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对文件的读写进行编码转换功能。
相关文章推荐
- Java Dictionary 类
- LeetCode 260 -Single Number III ( JAVA )
- 第一次使用JAVA在OJ上刷题
- Eclipse使用工具logcat
- Java Socket 通信(同步阻塞式I/O)
- Java之趣味编程结婚问题
- Struts2 Action访问Servlet API
- springMVC环境搭建
- java 富文本编辑内容去除格式 正则表达式
- java中&和&&的区别和联系
- 整理Java的MyBatis框架中一些重要的功能及基本使用示例
- Java之绘制实例
- Spring boot MVC: can't find JSP
- java修饰符
- JAVA日志
- 将studio中的library引进eclipse里
- java.io.FileNotFoundException: URL [jndi:/localhost/myBlogSys/WEB-INF/classes/] cannot be resolved t
- 使用 Spring 进行单元测试
- 把Java程序打包成jar文件包并执行
- Spring几大注解类的详解与区别