定义:

CharSet是对java nio编码解码的解决方案,专门负责字符的编码和解码。

编码:字符数组、字符串 ===> 字节数组。
解码:字节数组 ==> 字符数组、字符串

API详解:

获取CharSet的API:

//创建一个charSet,传入字符集名称 比如utf-8
public static Charset forName(String charsetName)//返回一个默认字符集的charset,UTF-8
public static Charset defaultCharset()

编码解码API

//解码,把字节缓冲区解码成字符缓冲区。
public final CharBuffer decode(ByteBuffer bb)//编码。把字符缓冲区编码成字节缓冲区。
public final ByteBuffer encode(CharBuffer cb)//编码。把字符串编码成字节缓冲区。
public final ByteBuffer encode(String str)//返回一个解码器,用于专门进行解码。提供更多的功能。
public abstract CharsetDecoder newDecoder();//返回一个编码器,用于专门进行编码。提供更多的功能。
public abstract CharsetEncoder newEncoder();

demo:

public static void testEnCodeDeCode(){Charset UTF8CharSet = Charset.forName("utf-8");Charset GBKCharSet = Charset.forName("gbk");String content = "我贼帅!!";ByteBuffer byteBuffer = UTF8CharSet.encode(content);//用同样的字符集进行解码,不会乱码System.out.println("=================>>>UTF8CharSet encode, UTF8CharSet decode<<<====================");System.out.println(new String(UTF8CharSet.decode(byteBuffer).array()));byteBuffer.clear();//用不一样的字符集进行解码,乱码System.out.println("=================>>>UTF8CharSet encode, GBKCharSet decode<<<====================");System.out.println(new String(GBKCharSet.decode(byteBuffer).array()));}

结果:

注意:

  1. 编码与解码要用一样的字符集,不然会造成乱码。
  2. 如果只是进行简单的编码解码,无需使用专用的编码器和解码器,在Charset中完成就好。

其他API:

//返回字符集的名字
public final String name()//返回字符集的名字,与name()一样的效果。
public String displayName()//返回是否支持传入参数charsetName代表的字符集
public static boolean isSupported(String charsetName)//返回此字符集是否注册在 http://www.iana.org/assignments/character-sets   IANA字符集注册表中。
public final boolean isRegistered();//返回此字符集的别名的set集合。
public final Set<String> aliases()//返回可用的字符集的集合。返回一个SortedMap结构,键是字符集名称,值是代表字符集的CharSet对象。
public static SortedMap<String,Charset> availableCharsets()//判断两个字符集是否相等,0相等,返回非零不相等,其实就是比较字符集的名字。忽略大小写。
public final int compareTo(Charset that)//返回此字符集是否支持编码。
public boolean canEncode()

Java NIO学习篇之缓冲区CharSet详解相关推荐

  1. Java NIO学习篇之缓冲区ByteBuffer详解

    定义: ByteBuffer是Buffer的实现类之一,是一个通用的缓冲区,功能要比其他缓冲区子类多.支持直接内存.是一个抽象类.子类实现是HeapByteBuffer(非直接缓冲区子类),Direc ...

  2. Java NIO学习篇之缓冲区Buffer详解

    定义 缓冲区Buffer在java nio中负责数据的存储,缓冲区就是数组,用于存储不同类型数据的数组. jdk为java七大基本类型数据都准备了响应的缓冲区(boolean值除外): ByteBuf ...

  3. Java NIO学习篇之通道FileChannel详解

    定义: FileChannel是Java NIO对应于磁盘等存储设备文件操作的通道. 常用API详解: 获取FileChannel的API /** * 打开一个与文件的连接通道,用于进行文件操作. * ...

  4. Java NIO学习篇之通道Channel详解

    定义: Channel:通道,运输的介质,可以大致比喻成铁路的铁轨,连接着两个车站,而channel用于打开与IO设备的连接,比如磁盘,套接字等. 通道使用完需要关闭. 与传统IO的Stream比较: ...

  5. Java NIO学习篇之直接缓冲区和非直接缓冲区

    定义 以上是书深入理解java虚拟机对直接内存的描述.直接缓冲区用的就是直接内存. java nio字节缓冲区要么是直接的,要么是非直接的.如果为直接字节缓冲区,则java虚拟机会尽最大努力直接在此缓 ...

  6. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解

    Java学习笔记16-Netty缓冲区ByteBuf详解 Netty自己的ByteBuf ByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的. JDK Byt ...

  7. [网络安全学习篇2]:IP详解及简单的DOS命令(千峰网络安全视频笔记 2 day)

    引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...

  8. Java NIO学习篇之NIO的基本认识

    定义: NIO:是从jdk1.4提出的,本意是New IO(相对于传统的IO),也叫 No Blocked IO(只相对于网络IO),它的出现弥补传统IO的不足,提出了更加高效的方式. NIO对于网络 ...

  9. J2EE学习篇之--JQuery技术详解

    前面我们讲解了的J2EE的技术都是服务端的技术,下面我们来看一下前端的一些开发技术,这一篇我们来看一下jQuery技术 简介: jQuery由美国人John Resig创建,至今已吸引了来自世界各地的 ...

最新文章

  1. .NET 并行(多核)编程系列之七 共享数据问题和解决概述
  2. vuex数据管理-数据适配
  3. “智网络 · 汇安全”绿盟科技智慧安全2.0全国巡讲上海首站开讲!
  4. [js] AudioContext有什么应用场景?
  5. 淮安掼蛋源码之--选牌与出牌
  6. [深度学习-原理]浅谈Attention Model
  7. MAC修改保存bash_profile文件
  8. 【图像融合】基于matlab IHS图像融合【含Matlab源码 724期】
  9. 附录A 进阶游戏编程书籍总结与推荐
  10. mysql中sql添加表字段_SQL如何添加字段
  11. 7-33 统计素数并求和
  12. mysql每次查询加流水号_通过SQL自动添加流水号
  13. PyTorch学习(二):Transform
  14. 2020年1024程序员节,成为CSDN博客专家
  15. C# 保存图片到本地文件夹中
  16. Elasticsearc倒排索引(二):分析analysis
  17. 程序员的诗和唐寅的诗
  18. linux检测不到数位板,[转载]ubuntu下gimp使用友基数位板
  19. PHP在大型网站开发
  20. Instant economics 即时经济 经济学人中英双语对照精读笔记

热门文章

  1. Java学习笔记:BlockingQueue接口
  2. 安卓学习笔记25:常用控件 - 下拉列表
  3. VB讲课笔记08:数组
  4. 【NOIP2015day1T2】【codevs4511】信息传递,最小环
  5. java编译生成哪些文件_java编译后生成什么文件?生成的文件包括什么?
  6. Intel Core Enhanced Core架构/微架构/流水线 (2) - 代表处理器
  7. 倪文迪陪你学蓝桥杯2021寒假每日一题:1.11日(2017省赛A第9题)
  8. 微信小程序云开发用户身份登录_你必须要掌握的微信小程序云开发
  9. 使用Jenkins配置自动化构建
  10. 【总结整理】写给非技术产品经理的技术能力要求----摘自《人人都是产品经理》...