繁体   English   中英

如何从枚举tp字节数组再返回?

[英]How to go from enum tp byte array and back again?

我有一个枚举

public enum Test {
  VALUE, NAME;
}

我将其转换为字节数组

byte[] array = Test.VALUE.toString().getBytes(Charsets.UTF_8)

我如何将其转换回枚举?

Test.valueOf(array.toString())不起作用。

array.toString的原因是toString返回数组的描述,而不是使用UTF-8编码使用数组中的字节构造的字符串。 toString只会返回类似[B@60e53b93 ,这对人类几乎没有任何意义。

要将字节数组转换为字符串,请使用字符串的构造函数,该构造函数采用字节数组和Charset 这是整个代码:

// converting to byte array
Test t = Test.VALUE;
byte[] bytes = t.toString().getBytes(StandardCharsets.UTF_8);
// converting back to Test
String str = new String(bytes, StandardCharsets.UTF_8);
Test newT = Test.valueOf(str);

如果您从逻辑上考虑, toString可能无法满足您的期望。 这是因为要将字节数组转换为字符串,需要指定编码! 您显然在调用toString时没有传递Charset对象,那么计算机到底将如何知道您想要的字符集呢?

首先必须使用构造函数将数组转换回适当的String array.toString()不会按照您的想法做,只会返回乱码。

byte[] array = Test.VALUE.toString().getBytes(Charsets.UTF_8);
String valueString = new String(array, Charsets.UTF_8);
Test value = Test.valueOf(valueString);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM