gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:08:18 24 4
gpt4 key购买 nike

我想在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com