BufferedInputStream示例
BufferedOutputStream示例
BufferedReader實例
BufferedWriter示例
ByteArrayInputStream示例
Java ByteArrayOutputStream示例
Java CharArrayReader示例
Java CharArrayWriter示例
Java Console類示例
Java DataInputStream類型
Java DataOutputStream實例
Java Externalizable實例
Java File實例
FileDescriptor示例
Java FileInputStream示例
FileOutputStream示例
Java FilePermission示例
Java FileReader示例
Java FileWriter示例
Java FilterInputStream示例
Java FilterOutputStream示例
Java FilterReader示例
Java FilterWriter示例
Java字符集
可以使用編碼方案將Unicode
字符轉換爲字節序列,反之亦然。java.nio.charset
包提供了將CharBuffer
編碼/解碼爲ByteBuffer
類,反之亦然。
Charset
類的對象表示編碼方案。CharsetEncoder
類執行編碼。CharsetDecoder
類執行解碼。可以通過傳遞字符集的名稱作爲它的參數,使用它的forName()
方法獲得Charset
類的對象。
對於簡單的編碼和解碼任務,可以使用Charset
類的encode()
和decode()
方法。
以下代碼顯示如何對存儲在字符緩衝區中的字符串Hello
中的字符序列進行編碼,並使用UTF-8
編碼方案對其進行解碼。
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()
方法將編碼和解碼的緩衝區返回。
以下代碼顯示如何從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);
}
}
}
字節順序
字節順序僅在存儲在字節緩衝器中的多字節值中有用。 要知道機器的字節順序,請使用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");
}
}
}
以下代碼演示如何獲取和設置字節緩衝區的字節順序。使用ByteBuffer
類對象的order()
方法來獲取或設置字節順序。
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();
}
}
上面的代碼生成以下結果。
Default Byte Order: BIG_ENDIAN
Byte Order: BIG_ENDIAN
1 44
Byte Order: LITTLE_ENDIAN
44 1