我有一个枚举
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
对象,那么计算机到底如何知道您想要什么字符集?
关于java - 如何从枚举到字节数组并再次返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43875330/