W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
我們可以使用編碼方案將Unicode字符轉(zhuǎn)換為字節(jié)序列,反之亦然。
java.nio.charset包提供了將CharBuffer編碼/解碼為ByteBuffer的類,反之亦然。
Charset類的對象表示編碼方案。 CharsetEncoder類執(zhí)行編碼。 CharsetDecoder類執(zhí)行解碼。
我們可以通過傳遞字符集的名稱作為它的參數(shù),使用它的forName()方法獲得Charset類的對象。
對于簡單的編碼和解碼任務(wù),我們可以使用Charset類的encode()和decode()方法。
以下代碼顯示如何對存儲在字符緩沖區(qū)中的字符串Hello中的字符序列進(jìn)行編碼,并使用UTF-8編碼方案對其進(jìn)行解碼。
Charset cs = Charset.forName("UTF-8"); CharBuffer cb = CharBuffer.wrap("Hello"); ByteBuffer encodedData = cs.encode(cb); CharBuffer decodedData = cs.decode(encodedData);
CharsetEncoder和CharsetDecoder類接受要編碼或解碼的輸入塊。
Charset類的encode()和decode()方法將編碼和解碼的緩沖區(qū)返回給我們。
以下代碼顯示如何從Charset對象獲取編碼器和解碼器對象。
Charset cs = Charset.forName("UTF-8"); CharsetEncoder encoder = cs.newEncoder(); CharsetDecoder decoder = cs.newDecoder();
以下代碼演示如何列出JVM支持的所有字符集。
import java.util.Map; import java.nio.charset.Charset; import java.util.Set; public class Main { public static void main(String[] args) { Map<String, Charset> map = Charset.availableCharsets(); Set<String> keys = map.keySet(); System.out.println("Available Character Set Count: " + keys.size()); for (String charsetName : keys) { System.out.println(charsetName); } } }
字節(jié)順序僅在存儲在字節(jié)緩沖器中的多字節(jié)值中有用。要知道我們機(jī)器的字節(jié)順序,請使用ByteOrder類的nativeOrder()方法。
import java.nio.ByteOrder; public class Main { public static void main(String args[]) { ByteOrder b = ByteOrder.nativeOrder(); if (b.equals(ByteOrder.BIG_ENDIAN)) { System.out.println("Big endian"); } else { System.out.println("Little endian"); } } }
以下代碼演示如何獲取和設(shè)置字節(jié)緩沖區(qū)的字節(jié)順序。
我們使用ByteBuffer的order()方法來獲取或設(shè)置字節(jié)順序。
import java.nio.ByteBuffer; import java.nio.ByteOrder; public class Main { public static void main(String[] args) { ByteBuffer bb = ByteBuffer.allocate(2); System.out.println("Default Byte Order: " + bb.order()); bb.putShort((short) 300); bb.flip(); showByteOrder(bb); bb.clear(); bb.order(ByteOrder.LITTLE_ENDIAN); bb.putShort((short) 300); bb.flip(); showByteOrder(bb); } public static void showByteOrder(ByteBuffer bb) { System.out.println("Byte Order: " + bb.order()); while (bb.hasRemaining()) { System.out.print(bb.get() + " "); } System.out.println(); } }
上面的代碼生成以下結(jié)果。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: