如何将字符串数组转换为字节数组?(java)

2022-09-04 19:38:26

我有一个一维字符串数组,我想将其转换为一维字节数组。我该怎么做?这需要字节缓冲器吗?我该怎么做?(字符串可以是任何长度,只是想知道如何去做这样的行为。在将其转换为字节数组后,我该如何将其转换回字符串数组?

-丹


答案 1

数组到数组,您应该手动转换并解析到两边,但是如果您只有一个字符串,则可以和;喜欢这个String.getBytes()new String(byte[] data)

public static void main(String[] args) {
    String[] strings = new String[]{"first", "second"};
    System.out.println(Arrays.toString(strings));
    byte[][] byteStrings = convertToBytes(strings);
    strings = convertToStrings(byteStrings);
    System.out.println(Arrays.toString(strings));

}

private static String[] convertToStrings(byte[][] byteStrings) {
    String[] data = new String[byteStrings.length];
    for (int i = 0; i < byteStrings.length; i++) {
        data[i] = new String(byteStrings[i], Charset.defaultCharset());

    }
    return data;
}


private static byte[][] convertToBytes(String[] strings) {
    byte[][] data = new byte[strings.length][];
    for (int i = 0; i < strings.length; i++) {
        String string = strings[i];
        data[i] = string.getBytes(Charset.defaultCharset()); // you can chose charset
    }
    return data;
}

对于字符串[]中的一个字节[],您必须:

  • 到byteArray使用一些定界仪从每个字符串连接字节数组
  • 从bytearray按相同的分隔符拆分,并创建字符串,如上所述。

答案 2

你没有说出你想用字节做什么(除了将它们转换回之后),但假设你可以把它们当作一个不透明的数据袋(所以你可以将它们保存到一个文件或通过网络发送它们,或者其他什么,但你不需要以任何方式检查或修改它们), 我认为你最好的选择是使用序列化。要序列化字符串数组,可以编写如下内容:String[]

final String[] stringArray = { "foo", "bar", "baz" };

final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
final ObjectOutputStream objectOutputStream =
    new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(stringArray);
objectOutputStream.flush();
objectOutputStream.close();

final byte[] byteArray = byteArrayOutputStream.toByteArray();

为了在之后恢复它,你会写反面:

final ByteArrayInputStream byteArrayInputStream =
    new ByteArrayInputStream(byteArray);
final ObjectInputStream objectInputStream =
    new ObjectInputStream(byteArrayInputStream);

final String[] stringArray2 = (String[]) objectInputStream.readObject();

objectInputStream.close();