Java字串轉為位元組陣列和位元組陣列

2019-10-16 22:23:44

本小節將學習如何在java中將String轉換為位元組陣列,以及如何將位元組陣列轉換為String。

注意,本小節中有術語(概念):String表示String類,也表示字串;而char表示char型別,也表示是一個字元。

字串到位元組陣列

可以使用String類getBytes()方法使用平台的預設字元集將字串編碼為位元組序列。此方法已過載,也可以傳遞Charset引數值指定字元集。
下面是一個簡單的程式,演示了如何在java中將String轉換為位元組陣列。


import java.util.Arrays;

public class StringToByteArray {

    public static void main(String[] args) {
        String str = "YiiBai";
        byte[] byteArr = str.getBytes();
        // print the byte[] elements
        System.out.println("String to byte array: " + Arrays.toString(byteArr));
    }
}

執行上面範例程式碼,得到以下結果 -

String to byte array: [89, 105, 105, 66, 97, 105]

也可以使用下面的程式碼獲取位元組陣列。

byte[] byteArr = str.getBytes("UTF-8");

但是,如果提供Charset的值,那麼需要捕獲UnsupportedEncodingException異常或丟擲它。更好的方法是使用Java 1.7中引入的StandardCharsets類,如下所示。

byte[] byteArr = str.getBytes(StandardCharsets.UTF_8);

這是在Java中將String轉換為位元組陣列的所有不同方法。

Java位元組陣列轉為String

下面來看一個簡單的程式,演示如何在Java中將位元組陣列轉換為String。


import java.util.Arrays;

public class JavaStringSplit {

    public static void main(String[] args) {
        byte[] byteArray = { 'Y', 'i', 'i', 'B', 'a', 'i' };
        byte[] byteArray1 = { 89, 105, 105, 66, 97, 105 };

        String str = new String(byteArray);
        String str1 = new String(byteArray1);

        System.out.println(str);
        System.out.println(str1);
    }
}

執行上面範例程式碼,得到以下結果 -

YiiBai
YiiBai

是否注意到上面程式碼在建立位元組陣列時提供了字元?
它的工作原理是因為自動裝箱和Y字元在位元組陣列中被轉換為 - 89。這就是位元組陣列到字串轉換的輸出相同的原因。

String還有一個建構函式,可以提供位元組陣列和Charset作為引數。因此,下面的程式碼也可用於將位元組陣列轉換為Java中的String。

String str = new String(byteArray, StandardCharsets.UTF_8);

String類還有一個將位元組陣列的子集轉換為String的方法。

byte[] byteArray1 =  { 89, 105, 105, 66, 97, 105 };
String str = new String(byteArray1, 0, 3, StandardCharsets.UTF_8);

上面的程式碼非常精細,變數str的值將是'Yii'。這就是將位元組陣列轉換為String。