Java 字符集

2018-02-07 11:12 更新

Java IO教程 - Java字符集


我們可以使用編碼方案將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é)緩沖器中的多字節(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é)果。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號