java Nio (五)字符集:CharSet

简介: java Nio (五)字符集:CharSet

字符集:java默认使用 Unicode 字符集,但是很多操作系统并不会使用 Unicode 字符集,那么当从系统中读取数据到java程序时,就会出现乱码等问题。


JDK 1.4 提供了CharSet 来处理字节序列和字符序列之间的转换关系,该类包含了用于创建解码器 和 编码器 的方法,还提供了获取 CharSet 所支持的字符集的方法,CharSet 是不可变的。


/**
 * 字符集:Charset
 *       编码(Encode) : 字符串 -> 字节数组
 *       解码(Decode) : 字节数组 -> 字符串
 *
 *  当要保存文本文件时,程序必须把文件中的每个字符翻译成二进制文件。
 *  当需要读取文件时程序必须把二进制序列转换为一个个的字符。
 */


1·,获取java中所支持的字符集:


//获取java所支持的字符集。
private static void test1(){
    Map<String, Charset> map = Charset.availableCharsets();
    for(Map.Entry<String,Charset> m : map.entrySet()){
        System.out.println(m.getKey()+" = "+m.getValue());
    }
}


2,字符 和 字节 按指定的字符集转换


//字符 和 字节 按指定的字符集转换
private static void test2(){
    Charset gbk = Charset.forName("GBK");
    //获取编码器
    CharsetEncoder ce = gbk.newEncoder();
    //获取解码器
    CharsetDecoder cd = gbk.newDecoder();
    //创建缓冲区
    CharBuffer cBuffer = CharBuffer.allocate(1024);
    cBuffer.put("我们好像在哪见过!");
    cBuffer.flip();//切换为可读
    try {
        //对字符串进行编码
        ByteBuffer encode = ce.encode(cBuffer);
        System.out.println("编码");
        for (int i = 0; i < encode.limit(); i++) {
            System.out.print(encode.get()+"  ");
        }
        //将字节解码为字符串
        encode.flip();
        CharBuffer decode = cd.decode(encode);
        System.out.println("\n解码后:"+decode.toString());
    } catch (CharacterCodingException e) {
        e.printStackTrace();
    }
}


decode(ByteBuffer bb) : 将字节序列转换 为 字符序列。

encode(CharBuffer cb) : 将字符序列转换 为 字节序列。

encode(String str) : 将String 中的福中序列转换为字节序列。


相关文章
|
2月前
|
存储 Java 数据处理
|
2月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
8天前
|
网络协议 Java Linux
Java基础BIO、NIO、AIO小结(下)
Java基础BIO、NIO、AIO小结(下)
16 0
|
8天前
|
缓存 Java 测试技术
Java基础BIO、NIO、AIO小结(上)
Java基础BIO、NIO、AIO小结
17 0
|
10天前
|
缓存 Java API
Java NIO和IO之间的区别
NIO(New IO),这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。
14 1
|
15天前
|
监控 Java 开发者
深入理解 Java 网络编程和 NIO
【4月更文挑战第19天】Java网络编程基于Socket,但NIO(非阻塞I/O)提升了效率和性能。NIO特点是非阻塞模式、选择器机制和缓冲区,适合高并发场景。使用NIO涉及通道、选择器和事件处理,优点是高并发、资源利用率和可扩展性,但复杂度、错误处理和性能调优是挑战。开发者应根据需求选择是否使用NIO,并深入理解其原理。
|
18天前
|
存储 监控 Java
浅谈Java NIO
浅谈Java NIO
6 0
|
18天前
|
消息中间件 存储 Java
【Java NIO】那NIO为什么速度快?
是这样的,在NIO零拷贝出现之前,一个I/O操作会将同一份数据进行多次拷贝。可以看下图,一次I/O操作对数据进行了四次复制,同时来伴随两次内核态和用户态的上下文切换,众所周知上下文切换是很耗费性能的操作。
26 0
【Java NIO】那NIO为什么速度快?
|
20天前
|
存储 监控 Java
Java输入输出:什么是NIO(New I/O)?
Java NIO是一种高效I/O库,特征包括非阻塞性操作、通道(如文件、网络连接)、缓冲区和选择器。选择器监控通道状态变化,通知应用程序数据可读写,避免轮询,提升性能。示例代码展示了一个使用NIO的服务器,监听连接、读取数据并处理客户端通信。
14 1
|
2月前
|
Oracle Java 关系型数据库
【问题】Cause: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
【问题】Cause: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK