java - 如何在Java中将枚举转换为字节数组?

标签 java arrays enums

我想在 Java 中将 Enum 值转换为字节数组,我在 StackOverflow 上找到了以下帖子:

How to cast enum to byte array?

但是,这并没有帮助。

我想迭代枚举的所有元素并将它们转换为字节数组或将整个枚举转换一次。

最佳答案

以字节表示的实例基本上是序列化,所以我想你可以简单地采用它

enum MyEnum implements Serializable {
    A
}

对于序列化为 byte[],您可以使用此 source code from Taylor Leese我已经进步了一点:

这将使我们能够序列化每个Serialized实例

public static byte[] serial(Serializable s) throws IOException {
    try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(bos)) {
        out.writeObject(s);
        out.flush();
        return bos.toByteArray();
    }
}

有了这个,我们可以再次将 byte[] 转换为实例(小心发送类,这可能会引发一些转换异常

@SuppressWarnings("unchecked")
public static <T extends Serializable> T unserial(byte[] b, Class<T> cl) throws IOException, ClassNotFoundException {
    try (ByteArrayInputStream bis = new ByteArrayInputStream(b)) {
        ObjectInput in = null;
        in = new ObjectInputStream(bis);
        return (T) in.readObject();
    }
}

我们可以测试一下:

public static void main(String[] args) throws Exception {
    byte[] serial = serial(Enum.A);
    Enum e = unserial(serial, Enum.class);

    System.out.println(e);
}

我们可以注意到,enum 始终是可序列化的,因此 implements 不是必需的,但我觉得这样更安全。

关于java - 如何在Java中将枚举转换为字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816511/

相关文章:

javascript - 检查 JavaScript 中字符串集合中是否存在字符串的最快方法是什么?

python - 如何使用python在机器人框架中导入和使用用户定义的枚举类

java - 需要有关 HIbernate 计数查询的帮助

java - 在 ListView 中获取长按的内容

javascript - 使用剩余参数将参数展平为一维数组

c - 用值初始化数组(指针)

c# - 单独的枚举类?

java - 如何迭代 Java 枚举?

java - 无法将 A 类转换为 B 类

java - map 卡住,添加到 slider 选项卡后不允许缩放