java - 如何从枚举到字节数组并再次返回?

标签 java

我有一个枚举

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/

相关文章:

java - 如何在我的代码中使用 n 或 i 等变量值?

java - Kotlin/Java SimpleDateFormat 给出奇怪的值

java - Eclipse不允许我编译

java - 如何从数据源列表实例化数据源?

java - jOOQ 中减去日期的数值超出范围

java - 将按钮添加到 TableView 中的单元格 (JAVAFX)

java - 如何存储单个浏览器选项卡/窗口的状态?

java - 两个日期之间的天数(不包括这两个日期)

java - SVN 将未提交的项目与存储库同步

java - 立即执行作业