Java NIO - CharSet

在 Java 中,每个字符都有一个定义明确的 unicode 代码单元,由 JVM 内部处理。因此,Java NIO 包定义了一个名为 Charset 的抽象类,主要用于对字符集和 UNICODE 进行编码和解码。

标准字符集

Java 中支持的 Charset 如下。

  • US-ASCII − 七位 ASCII 字符。

  • ISO-8859-1 − ISO 拉丁字母。

  • UTF-8 − 这是 8 位 UCS 转换格式。

  • UTF-16BE −这是具有大端字节顺序的 16 位 UCS 转换格式。

  • UTF-16LE − 这是具有小端字节顺序的 16 位 UCS 转换。

  • UTF-16 − 16 位 UCS 转换格式。

Charset 类的重要方法

  • forName() − 此方法为给定的字符集名称创建一个字符集对象。该名称可以是规范的,也可以是别名。

  • displayName() − 此方法返回给定字符集的规范名称。

  • canEncode() −此方法检查给定的字符集是否支持编码。

  • decode() − 此方法将给定字符集的字符串解码为 Unicode 字符集的字符缓冲区。

  • encode() − 此方法将 unicode 字符集的字符缓冲区编码为给定字符集的字节缓冲区。

示例

以下示例说明了 Charset 类的重要方法。

package com.java.nio;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
public class CharsetExample {
   public static void main(String[] args) {
    Charset charset = Charset.forName("US-ASCII");
    System.out.println(charset.displayName());
    System.out.println(charset.canEncode());
    String str= "Demo text for conversion.";
    //将给定字符集中的字节缓冲区转换为 unicode 中的字符缓冲区
    ByteBuffer byteBuffer = ByteBuffer.wrap(str.getBytes());
    CharBuffer charBuffer = charset.decode(byteBuffer);
    //将 unicode 中的字符缓冲区转换为给定字符集中的字节缓冲区
    ByteBuffer newByteBuffer = charset.encode(charBuffer);
    while(newbb.hasRemaining()){
        char ch = (char) newByteBuffer.get();
        System.out.print(ch);
    }
    newByteBuffer.clear();
   }
}

输出

US-ASCII
Demo text for conversion.