Java NIO - zestaw znaków
W Javie dla każdego znaku istnieją dobrze zdefiniowane jednostki kodu Unicode, które są wewnętrznie obsługiwane przez JVM, więc pakiet Java NIO definiuje abstrakcyjną klasę o nazwie Charset, która jest używana głównie do kodowania i dekodowania zestawu znaków i UNICODE.
Standardowe zestawy znaków
Obsługiwane zestawy znaków w java podano poniżej.
US-ASCII - Siedem bitowych znaków ASCII.
ISO-8859-1 - Alfabet łaciński ISO.
UTF-8 - To jest 8-bitowy format transformacji UCS.
UTF-16BE - To jest 16-bitowy format transformacji UCS z kolejnością bajtów big endian.
UTF-16LE - To jest 16-bitowa transformacja UCS z małą kolejnością bajtów endian.
UTF-16 - 16-bitowy format transformacji UCS.
Ważne metody klasy Charset
forName() - Ta metoda tworzy obiekt zestawu znaków dla podanej nazwy zestawu znaków.Nazwa może być kanoniczna lub alias.
displayName() - Ta metoda zwraca kanoniczną nazwę podanego zestawu znaków.
canEncode() - Ta metoda sprawdza, czy dany zestaw znaków obsługuje kodowanie, czy nie.
decode() - Ta metoda dekoduje ciąg podanego zestawu znaków do bufora znaków zestawu Unicode.
encode() - Ta metoda koduje bufor znaków zestawu znaków Unicode do bufora bajtów danego zestawu znaków.
Przykład
Poniższy przykład ilustruje ważne metody klasy 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.";
//convert byte buffer in given charset to char buffer in unicode
ByteBuffer byteBuffer = ByteBuffer.wrap(str.getBytes());
CharBuffer charBuffer = charset.decode(byteBuffer);
//convert char buffer in unicode to byte buffer in given charset
ByteBuffer newByteBuffer = charset.encode(charBuffer);
while(newbb.hasRemaining()){
char ch = (char) newByteBuffer.get();
System.out.print(ch);
}
newByteBuffer.clear();
}
}
Wynik
US-ASCII
Demo text for conversion.